
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 · 184 阅读 · 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 · 142 阅读 · 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 · 431 阅读 · 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 · 198 阅读 · 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 · 110 阅读 · 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 · 146 阅读 · 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 · 354 阅读 · 0 评论 -
quick_sort、merge_sort
一、快排思路————分治1 确定分界点X 左端点arr[l] 右端点arr[r] 中间arr[(r+l)>>1]2 调整 保证X左边的数<=X,右边的数>=X3 递归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 · 189 阅读 · 0 评论