![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
y总yyds
Fluent!
这个作者很懒,什么都没留下…
展开
-
数论(二)
欧拉函数 f(n) 表示1到n中与n互质的数的个数 例如 f(6) = 2 (1 2 3 4 5 6 -->1和 5) 求法 如果 N = p1^c1 * p2^c2 * … *pk^ck 代码实现 分解质因数求 int phi(int x) { int res = x; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { res = res / i *原创 2020-11-25 21:30:48 · 133 阅读 · 0 评论 -
数论(一)
素数 试除法求素数 bool is_prime(int x) { if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true; } 试除法分解质因数 void divide(int x) { for (int i = 2; i <= x / i; i ++ )原创 2020-11-25 21:30:14 · 111 阅读 · 0 评论 -
字典树、并查集、堆
一、trie树 const int N =1e5+10; char str[N]; int son[N][26],cnt[N],idx; // 下标是0的点即使根节点也是空节点 // son[][]存储树中每个节点的子节点 // cnt[]存储以每个节点结尾的单词数量 void insert(char str[]) { int p=0; // 根节点 for(int i=0;str[i];i++) { int u= str[i]-'a'; if(!son[p][u]) son[p][原创 2020-11-10 20:09:03 · 352 阅读 · 0 评论 -
模拟单向双向链表、模拟栈与队列、KMP
一、模拟链表 单链表 模拟单链表 #include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int head,ne[N],e[N],idx; int n; // head 指向头节点 // ne[i]指向第i个节点的下一个节点 // e[i] 第i个节点的值 // idx 存储当前已经用到了哪个点 void init() { head = -1; idx=0; } //将x插到头节点 void add_原创 2020-11-03 19:05:10 · 150 阅读 · 0 评论 -
双指针算法、位运算、离散化
双指针算法 板子 int j; for(int i=0,j=0;i<n;i++) { while(j<i&&check(i,j)) j++; //具体题目逻辑 } 最长连续不重复子序列 #include<bits/stdc++.h> using namespace std; int n; const int N=1e5+10; int a[N],s[N]; int res; int main() { scanf("%d",&n); for(int原创 2020-10-24 07:50:31 · 85 阅读 · 0 评论 -
高精度、前缀和、差分
A+B 高精度 #include<bits/stdc++.h> using namespace std; vector<int> add(vector<int> &A,vector<int> &B) { vector<int> C; int t=0; for(int i=0;i<A.size()||i<B.size();i++) { if(i<A.size()) t+=A[i]; if(i<原创 2020-10-22 16:29:43 · 113 阅读 · 0 评论 -
整数二分
整数二分 两个板子 主要通过check来判断使用哪个板子 int l=0,r=n-1; while(l<r) { int mid = r+l>>1; if(check(mid)) r=mid; else l=mid+1; } int l=0,r=n-1; while(l<r) { int mid = r+l+1>>1; if(check(mid)) l=mid; else r=mid-1; } 代码 给定一个按照升序排列的长度为n原创 2020-10-20 21:53:14 · 308 阅读 · 0 评论 -
quick_sort、merge_sort
一、快排 思路————分治 1 确定分界点X 左端点arr[l] 右端点arr[r] 中间arr[(r+l)>>1] 2 调整 保证X左边的数<=X,右边的数>=X 3 递归 void quick_sort(int arr[],int l,int r) { if(l>=r) return ; int x = arr[(l+r)>>1]; int i=l-1; int j=r+1; while(i<j) // 当 i==原创 2020-10-20 21:47:04 · 163 阅读 · 0 评论