随笔分类 -  Algorithm

1 2 3 4 5 ··· 10 下一页
摘要:0代表还没访问 1代表正在访问 2代表已经访问完 如果dfs过程中遇到1,则表明找到了环 遇到2则不必继续找,用于剪枝 vector<int> adj[2010]; int vis[2010]; bool DFS(int u) { vis[u] = 1; for (auto nxt : adj[u] 阅读全文
posted @ 2023-05-02 10:32 80k 阅读(48) 评论(0) 推荐(0) 编辑
摘要:https://www.cnblogs.com/cloudplankroader/p/10988844.html 阅读全文
posted @ 2023-04-27 22:39 80k 阅读(8) 评论(0) 推荐(0) 编辑
摘要:#pragma GCC optimize(3,"Ofast","inline") View Code 阅读全文
posted @ 2023-04-02 21:52 80k 阅读(63) 评论(0) 推荐(0) 编辑
摘要:经典结论:长度为n的排列的逆序对数量的期望为C(n,2)/2。 简单证明:任意两个数在一个排列中,为逆序的概率是(1/2),选择两个数的方案为C(n,2)。 故长度为n的排列的逆序对数量的总和为n!*C(n,2)/2,其中,n!是排列的数量 例题:https://ac.nowcoder.com/ac 阅读全文
posted @ 2022-11-14 22:21 80k 阅读(332) 评论(0) 推荐(0) 编辑
摘要:1、流网络:存在一个源点,一个汇点,有向边,带边权(容量),假设没有反向边(反向边可以通过加点处理掉) 2、可行流f:(1)满足容量(边权)限制,即流量小于等于容量,且大于等于0,(2)流量守恒:除了源点和汇点,其余点不存储流量(流进多少就流出多少)。 3、可行流的流量|f|:每秒从源点净流出的流量 阅读全文
posted @ 2022-11-02 21:16 80k 阅读(108) 评论(0) 推荐(0) 编辑
摘要:RMQ 又叫 st表 跳表 本质是倍增动态规划 查询的时候,每次查询使用一个最大的k,使得2^k<=len(r-l+1) 然后找到[l, r]区间中前2^k和后2^k中的最大值,取最大 模板: const int N=200010; const int M=18;//2^M>200010 int n 阅读全文
posted @ 2022-10-18 17:16 80k 阅读(34) 评论(0) 推荐(0) 编辑
摘要:利用归并排序统计逆序对的数量 int n; int nums[500010]; int backup[500010]; LL MergeSort(int l,int r) { if(l==r) return 0; int mid=(l+r)/2; LL res=MergeSort(l,mid)+Me 阅读全文
posted @ 2022-10-18 16:26 80k 阅读(18) 评论(0) 推荐(0) 编辑
摘要:基于分治的思想: 例题:https://www.acwing.com/problem/content/99/ 模板: 求num^0+num^1+...+num^k const int MOD=9901; int QuickExp(int base,int exp) { base%=MOD; int 阅读全文
posted @ 2022-10-15 17:54 80k 阅读(24) 评论(0) 推荐(0) 编辑
摘要:1、SG函数 SG函数的定义:可以到达的全部点的SG函数中没有出现的最小自然数 可以解决棋子移动的博弈论问题 推导方式基于nim游戏,https://www.acwing.com/solution/content/15279/ https://www.acwing.com/problem/conte 阅读全文
posted @ 2022-10-14 11:01 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:对于求数学期望的问题: 由于数学期望的线性性质,一般用记忆化的形式,从后往前dp 例题:https://www.acwing.com/problem/content/description/220/ 阅读全文
posted @ 2022-10-11 10:51 80k 阅读(31) 评论(0) 推荐(0) 编辑
摘要:容斥原理的复杂度是2^n,一般n不会很大 形如: 由于容斥原理一共有2^n中选法,可以用二进制枚举,1表示选择某个条件。 然后将偶数个1的状态加起来,奇数个1的状态减去 例题: https://www.acwing.com/problem/content/216/ 莫比乌斯函数: 定义: 用于结合容 阅读全文
posted @ 2022-10-10 18:24 80k 阅读(38) 评论(0) 推荐(0) 编辑
摘要:高斯消元求解n元线性方程组 原理 先变上三角,再变对角矩阵,则此时 右边的值就是方程的解 步骤: 模板:(n*n且保证有唯一解,即n个线性方程n个未知数且有唯一解) const int N=15; double A[N][N]; int n; void Gauss() { //A矩阵存储了系数和右端 阅读全文
posted @ 2022-10-09 17:38 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:卡特兰数的基本模型是,(0,0)->(n,n)且不越过x=y这条线 等价于另一个模型:01序列且全部前缀中0的个数都大于1,其中0对应于x方向移动,1对应y方向移动 例题:https://www.acwing.com/problem/content/1318/ 此题可以将一个1-n的前缀的选择(选择 阅读全文
posted @ 2022-10-09 16:51 80k 阅读(32) 评论(0) 推荐(0) 编辑
摘要:模板: int primes[N],cnt; bool not_prime[N]; void Init() { for(int i=2;i<N;i++) { if(!not_prime[i]) { primes[cnt++]=i; for(int j=i+i;j<N;j+=i) { not_prim 阅读全文
posted @ 2022-10-08 15:56 80k 阅读(22) 评论(0) 推荐(0) 编辑
摘要:lucus求解组合数的时间复杂度为 O(MODlogn(MOD)) 适用于MOD较小但n较大的情况 模板: LL MOD=1e6+3; LL QuickExp(LL base,LL exp) { LL res=1; while(exp) { if(exp&1) { res*=base; res%=M 阅读全文
posted @ 2022-10-08 15:08 80k 阅读(17) 评论(0) 推荐(0) 编辑
摘要:n个箱子k个小球 1、不可空: k个小球共有k-1个空隙,k-1个空隙中选n-1个位置放入隔板,形成n个箱子 答案为C(k-1,n-1) 2、可空 k个小球和n-1个隔板,选取k个位置放小球,并形成n个箱子 答案为C(n+k-1,k) 阅读全文
posted @ 2022-10-07 09:37 80k 阅读(618) 评论(0) 推荐(0) 编辑
摘要:LCP也可以用来进行一个字符串的子字符串的比较 需要预处理lcp[i][j]数组,表示从i开始的后缀和从j开始的后缀的最长公共前缀 lcp[i][j]可以从lcp[i+1][j+1]递推过来 O(n^2)预处理 O(1)查询 和字符串哈希相比,预处理较慢,但是更加准确 int lcp[4010][4 阅读全文
posted @ 2022-10-05 16:38 80k 阅读(146) 评论(0) 推荐(0) 编辑
摘要:字符串哈希可以快速判断两个子字符串是否相等 O(n)预处理,O(1)判断 原理:https://www.cnblogs.com/ydUESTC/p/15722400.html 注意 字符串哈希时后面的字符视为低位,这样方便取一段字符的哈希时先做乘法再做减法。 例题:https://leetcode. 阅读全文
posted @ 2022-10-05 16:16 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:对正整数a和b, a%b的值: b>a: 则a%b=a a>=b>=a/2: 则a%b=a-b<=a/2 b<=a/2: 则a%b<b<=a/2 可以发现 在b<=a时,一次取模运算至少会将a/2,a的变化情况为log次。 阅读全文
posted @ 2022-10-04 19:31 80k 阅读(148) 评论(0) 推荐(0) 编辑
摘要:可以用快速幂的形式求大量的相同矩阵乘法。 1、快速幂求斐波那契数列的第n项(n很大) 先将斐波那契数列的递推转化成矩阵形式 然后用快速幂求解A^n 例题:求斐波那契数列的前n项和(n很大) 可以将上例的行向量变为Fn=(fn,fn+1,Sn),矩阵A变为{{0,1,0}, {1,1,1}, {0,0 阅读全文
posted @ 2022-10-04 12:17 80k 阅读(34) 评论(0) 推荐(0) 编辑

1 2 3 4 5 ··· 10 下一页
点击右上角即可分享
微信分享提示