03 2022 档案
乘法逆元
摘要:a/b % m 如果b,m互质,求解同余方程b*x=1(mod m); 如果b,m互质,并且b<m,b^(m-2) 即为b的乘法逆元,用快速幂power求解 求多个数的乘法逆元,用递推公式, inv[1] = 1; for(int i = 2; i < p; ++ i) inv[i] = (p - 阅读全文
posted @ 2022-03-26 20:39 我疯故我在 阅读(59) 评论(0) 推荐(0) 编辑
LIS最长上升子序列
摘要:首先需要知道,子串和子序列的概念,我们以字符子串和字符子序列为例,更为形象,也能顺带着理解字符的子串和子序列: (1)字符子串指的是字符串中连续的n个字符,如abcdefg中,ab,cde,fg等都属于它的字串。 (2)字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的 阅读全文
posted @ 2022-03-21 21:26 我疯故我在 阅读(37) 评论(0) 推荐(0) 编辑
Sudoku(数独)
摘要:每个状态下,选择”能填的合法数字“最少的位置,考虑该位置上填什么数,作为搜索的分分支,而不是任意找出一个位置。 数独可以转化为精准覆盖问题,使用一种叫作Dancing Links的数据结构求解。 阅读全文
posted @ 2022-03-13 20:46 我疯故我在 阅读(331) 评论(0) 推荐(0) 编辑
树与图的广度优先遍历,拓扑排序
摘要:拓扑排序 有向无环图 若序列A满足,每条边(x,y),x在A中都出现在y之前,A就是有向无环图顶点的一个拓扑序 add 结合位运算bitset状态压缩,可记录每条边分别和哪条边连接,结合拓扑排序得出来的序列,减少时间复杂度。 阅读全文
posted @ 2022-03-13 20:37 我疯故我在 阅读(45) 评论(0) 推荐(0) 编辑
时间戳
摘要:深度优先遍历的过程,以每个节点第一次被访问的顺序,一次给予这N个节点1~N的整数标记,该标记就被称为时间戳 阅读全文
posted @ 2022-03-13 20:33 我疯故我在 阅读(184) 评论(0) 推荐(0) 编辑
图的连通块划分
摘要:v数组标记了每个点属于哪一个连通块 阅读全文
posted @ 2022-03-13 20:30 我疯故我在 阅读(32) 评论(0) 推荐(0) 编辑
树的重心
摘要:自底向上进行统计的 阅读全文
posted @ 2022-03-13 20:29 我疯故我在 阅读(8) 评论(0) 推荐(0) 编辑
树的深度
摘要:v[x]=1; for(int i=head[x]; i; i=next[i]) { int y=ver[i]; if(v[y]) continue; d[y]=d[x]+1;//从父节点x到节点y递推,计算深度 dfs(y); } 阅读全文
posted @ 2022-03-13 20:28 我疯故我在 阅读(15) 评论(0) 推荐(0) 编辑
树的DFS序
摘要:在刚进入递归后以及即将回溯前各记录一次该点的编号 阅读全文
posted @ 2022-03-13 20:26 我疯故我在 阅读(5) 评论(0) 推荐(0) 编辑
Trie(字典树)
摘要:int trie[SIZE][26],tot=1; void insert(char* str) { int len=strlen(str),p=1; for(int k=0; k<len; k++) { int ch=str[k]-'a'; if(trie[p][ch]==0) trie[p][c 阅读全文
posted @ 2022-03-12 11:19 我疯故我在 阅读(28) 评论(0) 推荐(0) 编辑
后缀数组(SA)
摘要:倍增、DC3、前缀Hash值+sort+二分 阅读全文
posted @ 2022-03-12 11:15 我疯故我在 阅读(25) 评论(0) 推荐(0) 编辑
最小表示法
摘要:char s[N * 2]; scanf("%s", s + 1); int n = strlen(s + 1); for(int i = 1; i <= n; i++) s[i + n] = s[i]; int i = 1, j = 2, k; while(i <= n && j <= n) { 阅读全文
posted @ 2022-03-12 11:12 我疯故我在 阅读(60) 评论(0) 推荐(0) 编辑
KMP匹配模式
摘要:一维 KMP算法next数组的求法 初始化 nxt[1]=0; for(int i=2,j=0;i<=n;i++){ while(j>0&&a[i]!=a[j+1]) j=nxt[j]; if(a[i]==a[j+1]) j++; nxt[i]=j; } KMP算法f数组的求法 for(int i= 阅读全文
posted @ 2022-03-12 11:09 我疯故我在 阅读(34) 评论(0) 推荐(0) 编辑
字符串Hash
摘要:一维字符串Hash unsigned long long f[N],p[N];//字符串前缀哈希值;p进制,一般取131,13331; unsigned long long get_hash(int l,int r) { return f[r]-f[l-1]*p[r-l+1]; } p[0]=1; 阅读全文
posted @ 2022-03-12 11:04 我疯故我在 阅读(45) 评论(0) 推荐(0) 编辑
单调队列
摘要:1 int l=1,r=1; 2 q[1]=0; 3 for(int i=1; i<=n; i++) { 4 while(l<=r&&q[l]<i-m) l++; 5 ans=max(ans,sum[i]-sum[q[l]]); 6 while(l<=r&&sum[q[r]]>=sum[i]) r- 阅读全文
posted @ 2022-03-12 10:50 我疯故我在 阅读(22) 评论(0) 推荐(0) 编辑
双端队列
摘要:deque 阅读全文
posted @ 2022-03-12 10:47 我疯故我在 阅读(19) 评论(0) 推荐(0) 编辑
普通队列
摘要:建立一个总的队列,这个总的队列里的元素分别记录每个子队列的序号 阅读全文
posted @ 2022-03-12 10:46 我疯故我在 阅读(19) 评论(0) 推荐(0) 编辑




点击右上角即可分享
微信分享提示