摘要: 例题 例题 例题 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中 现在我们假定 fa[i] 表示第 i 个人的老大是谁 现在我们有甲,乙,丙三个人(分别用 a, b, c 阅读全文
posted @ 2021-03-09 17:07 Carrot_Rui 阅读(33) 评论(0) 推荐(0)
摘要: 栈: 队列 单链表 双链表 1.栈 #include <bits/stdc++.h> using namespace std; const innt N = 1e6 + 10; //栈 stk -->数组模拟栈 tt--> 栈顶 int stk[N], tt ; //进栈 void push(int 阅读全文
posted @ 2021-03-02 17:04 Carrot_Rui 阅读(73) 评论(0) 推荐(0)
摘要: 字典树存储字符串,查找方便,迅速; 基本思想就是建立一棵树,每一层都有26个节点(对应26个字母),如果这个字符没有的话就占位,有就通过这个节点向下一层建树 即一个字符串,每个字母对应每一层,对应的层数里面有这个字母就下一层没有就建节点 Trie树例题 #include <iostream> #in 阅读全文
posted @ 2021-02-28 23:23 Carrot_Rui 阅读(51) 评论(0) 推荐(0)
摘要: #include <bits/stdc++.h> using namespace std; int n, m, ans = 1;//n m 表示要约的数 ans调试函数递归用 clock_t start, finish; //计时器 //辗转相除法 适用于比较大的数 但是最好不要是高精度 % 的效率 阅读全文
posted @ 2021-02-23 23:43 Carrot_Rui 阅读(90) 评论(0) 推荐(0)
摘要: 水 //埃氏筛 void Era(int qwq){ for(int i=2;i<=qwq;i++){ if(vis[i])continue;//是合数就不执行 for(int j=i*2;j<=qwq;j+=i) vis[j]=true;//j=i的倍数,每次加i,即为i的倍数每次加1,p数组的第 阅读全文
posted @ 2021-02-21 23:00 Carrot_Rui 阅读(57) 评论(0) 推荐(0)
摘要: 水 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N = 1e4 + 9; int n ; struct node{ int data; // 数值 int rank 阅读全文
posted @ 2021-02-21 22:59 Carrot_Rui 阅读(42) 评论(0) 推荐(0)
摘要: 水 //fib高精度用二维数组存 #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> using namespace std; int n,len=1,f[5003][5003]; //f[k][i] - 阅读全文
posted @ 2021-02-21 22:57 Carrot_Rui 阅读(68) 评论(0) 推荐(0)
摘要: 水 我们知道对于幂运算有: ab%k=(a%k)(b%k)%k 如: 5 * 6 % 4 = (1+4)(2+4)% 4 = 1 * 2 % 4 因为 1 * 4 和 2 * 4 和4 * 4模4都为0 位运算加速 // 求 m^k mod p,时间复杂度 O(logk)。 int qmi(int 阅读全文
posted @ 2021-02-21 22:55 Carrot_Rui 阅读(56) 评论(0) 推荐(0)
摘要: 前缀和: 一维: #define N 10004 void _1(){ int n, a[N], ans[N]; scanf("%d",&n); for(int i = 1; i <= n; i++){scanf("%d",a+i);ans[i] += ans[i-1] + a[i] ;} // f 阅读全文
posted @ 2021-02-21 22:53 Carrot_Rui 阅读(76) 评论(0) 推荐(0)
摘要: 模板: bool check(int x) {/* ... */} // 检查x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: int bsearch_1(int l, int r) { while (l < r){ int mid = l + r 阅读全文
posted @ 2021-02-21 22:48 Carrot_Rui 阅读(29) 评论(0) 推荐(0)