04 2023 档案
康托展开 全排列与其字典序的双映射转换
摘要:对于给定的序列1 2 3,其全排列有6种,按照字典序从小到大即为 0 1 2 3 4 5 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 可以看出,每个全排列序列都唯一对应一个字典序数(从0开始),那么,有什么方法可以根据序列求出其对应的字典序或者根据字典序来推断其对应序列呢
逆天的全排列函数next_permutation()
摘要:next_permutation 是算法库(<algorithm>)里的一个用于求全排列的函数,其定义为 next_permutation(_BidIt _First, _BidIt _Last) 可以看出,对于next_permutation需要可迭代容器的范围(即头尾),然后会根据字典序来对此序
高精度模板 整数大数除以小整数数
摘要:vector<int> Div(vector<int>& A, int& B) { vector<int>C; int T = 0;//除数 for (int i = A.size() - 1; i >= 0; i--)//注意,除法模拟是从最高位开始的 { T = T * 10 + A[i];//
高精度模板 大数减大数 可变数组vector实现
摘要:vector<int> Sub(vector<int>& A, vector<int>& B)//这里默认长数减去短数 { vector<int> C;//结果向量 int T = 0;//上一位借位标志位 for (int i = 0; i < A.size(); i++) { T = A[i]
高精度模板 大数乘以小数 vector实现
摘要:vector<int> Mul(vector<int>& A, int &B) { vector<int>C; int T = 0; for (int i = 0;i < A.size()||T/*考虑进位位未处理完*/;i++) { if(i<A.size()) T += A[i] * B; C.
高精度模板 大数加大数,可变数组vector实现
摘要:vector<int> Add(vector<int>& A, vector<int>& B)//采用引用传入vector,避免将其全部复制传值,使用引用会更快 { if (A.size() < B.size())return Add(B , A);//由于有大小位数的处理,我们默认位数较大的那个去
洛谷P2241 统计方形 ,棋盘问题升级板,给出格子坐标中矩形以及正方形的计算方法
摘要:在做这道题之前我们先了解一下棋盘问题 棋盘问题 (qq.com) 对于棋盘问题,我们可以得出对于一个n*n的正方形方格阵如何求其包含的正方形个数 也就是数每个正方形的中间点,然后将其点排列成矩阵,对于其中m*m规格的正方形,其个数为(n-m-1)*(n-m-1)- 现在回到我们这道题,他的要求就更普
二分模板 不会乱的
摘要:(29条消息) 不需要考虑mid+1、mid-1的二分查找模板,希望大家都能学会_二分查找如果light mid 不加1_一支彩色铅笔的博客-CSDN博客 非常好的博客,爱来自中国 二分查找为什么总是写错?_哔哩哔哩_bilibili 非常好的视频,爱来自中国 下面给出代码模板,这种二分比y总给出的
AcWing 788 逆序对的数量
摘要:788. 逆序对的数量 - AcWing题库 逆序对,即位置顺序与大小顺序不符的数对,也就是对于一个期望升序的序列Num[],当i<j时,Num[i]>Num[j] 这道题要求求出逆序对的个数,显然在归并排序的过程中我们就是在逐步的消除逆序对,所以我们可以在递归的排序过程中求出逆序对的个数 已知归并
归并排序模板
摘要:void merge_sort(int q[], int L, int R) { if (L >= R)return;//递归中止条件 int mid =(L + R) >> 1; merge_sort(q, L, mid); merge_sort(q, mid + 1,R);//先递归处理左右 i
快排模板
摘要:void quick_sort(int* Num, int L, int R) { if (L >= R)return; swap(Num[L], Num[L + R >> 1]); int i = L; int j = R; int Temp = Num[L]; while (i < j) { f
洛谷P1923 求第K小的数 研讨关于输入输出效率的问题(scanf and cin ,printf and cout)
摘要:最简单的思想就是将这n个数从小到大排序,然后直接输出下标为K的数,不用想肯定会超时,三个测试点过了,另外两个超时。 那么我想的就是,既然全排序会超时,有没有什么方法可以不用全排序也可以拿出第K小的数呢,我想到了堆这种数据结构,我们不用使用堆排序,而是将数组建堆,不断从堆中拿出当时最小的数,当取出第K
洛谷P1045 麦森数。 快速幂算法以及固定位数的高精度乘法的优化
摘要:P1045 [NOIP2003 普及组] 麦森数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 想法很简单,我们要做的就是两件事,求2^P-1的位数,求出2^P-1的最后500位数,也就是低五百位,500位想一想常规类型肯定存不下,int到10^9,long long 到10^1
快速幂结合取模运算
摘要:先贴一个快速幂模板 long long int quik_power(int base, int power) { long long int result = 1; while (power > 0) //指数大于0进行指数折半,底数变其平方的操作 { if (power & 1) //指数为奇数
关于大数乘法的数组类型问题(int 还是char)
摘要:可以知道在处理高精度乘法的时候,我们是不考虑当场进位的,在所有位数都模拟完竖式乘法后才进行逐位进位,这就要求存储每个位的数组保证不会爆掉溢出 众所周知char类型最多只能存储到255,非常非常容易溢出成负数,对于char型数组要考虑每一步乘法都要进位。 而int型数组最大21亿就不用考虑这种问题,当
快速幂算法,模板
摘要:对于计算比较大的幂的结果时可以采用快速幂来降低时间复杂度 例如求K的n次幂 int Pow(int K, int n) { for (int i = 0; i < n; i++) K *= K; return K; } 最朴素的思想就是直接n次循环,让K自乘n次,但是随着n的增加循环次数会越来越多,
洛谷P1249最大乘积,数论找规律
摘要:这道题是数论加高精度,高精度倒好说,就是高精度乘法实现,模拟列竖式乘法,但是找出要乘的这几个数实属不容易,没学过数论,只能从题解中学怎么找规律这里引用一下洛谷题解区赞数最高的题解 不知道大家看其他的题解有没有产生很多问号??? (本题解修改了一些第一次提交发现的错误,感谢yhm12345同学指出。)
洛谷P2670 扫雷游戏 关于区域搜索标记的坐标增量法
摘要:最简单的思路就是扫描一边所有节点,对每个非地雷节点,去检查一下他八个方向的元素是否有‘*’,有的话就加一 但是逐个写出有点麻烦,我们不妨定义两个增量数组来存储每一次的相对位移,对每次检查只需要遍历这个数组即可 如下 #include<stdio.h> #include<stdlib.h> #incl
关于OJ中的输入格式的问题
摘要:输入:1 2 3 4 5 6 7 8 9 10 如上的输入,并未告诉我们终止条件,这种无上限输入的格式可以用以下格式读入 int main() { int S[100]; int i = 0; while (scanf("%d", S + i)) { i++; } } 其中scanf改成cin也是一
洛谷P2415 集合求和(数学问题,使用集合子集求和公式)
摘要:可以知道对于一个有n个数据的集合,其子集个数有2^n个 至于证明可以这样理解,对于n个数据,其子集就是对数据进行组和,而对于每个位置上的数据,组合时仅有两种状态即有此数据或无此数据,也就是有两种可能,而对于n个数据,就有2^n种可能 不妨设其中一个非空数据X,对于X,依据X可以将子集划分为两种,包含
洛谷P1308统计单词数,strtok函数的使用以及对于单词分割的一些思考
摘要:[NOIP2011 普及组] 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,
关于一些OJ上的\r以及\n以及字符串行输入的一些警示
摘要:\r,\n,\r\n的区别 - 小 天 - 博客园 (cnblogs.com) 这篇文章详细的解释了在Windows系统和Linux系统下的换行的区别 概括的说,就是Windows系统下的“\r\n”等于Linux系统下的’\n‘ 因此在一些搭建在Linux终端上的Oj,测试输入数据是在WIndow
杨辉三角递推公式
摘要:对于一个二维数组来说,我们用真实下标来表示数组下标,即下标从1开始而非从0开始 那么对于杨辉三角数组的元素a[i][j]=a[i−1][j]+a[i−1][j−1],其中初值条件为a[i][1]=1(即最前列全置1),a[i][i]=1(最后列全置1), 然后通过一个嵌套循环即可计算得出 for(i
对未来的自己的一个提醒。关于打表答题的思路,洛谷P5731
摘要:P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题就是纯纯找规律的模拟题,但是在比赛或者思维比较松散的情况下紧张的时候会想不出模拟思路 这时候如果测试数据的范围比较小,如本题的数据最大就到九阶方阵,所以可以手算出每一种类型打表输出,不用去考
由入门题回想起来的哈希表
摘要:洛谷P2550 P2550 [AHOI2001]彩票摇奖 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 可以看到这是个入门题,完全可以用暴力查找(for循环二重嵌套)来实现,但是这个查找形式让我想起了一个月之前学的哈希表(HashMap) 众所周知,利用哈希表可以将查找的时间复杂