
ACM算法模板
文章平均质量分 60
摸不着脑子
在读菜鸡大学生,一步一步变成咸鱼的道路
展开
-
算法模板之快速幂取模(HDU1061 Rightmost Digit)
模板总结归纳://快速幂(取模)// O(logi)long long pow_mod(long long a, long long i, long long n){ if(i == 0) return 1 % n; int temp = pow_mod(a, i >> 1, n); temp = temp * temp %n; if(i & 1) temp =...原创 2018-03-29 19:46:06 · 282 阅读 · 0 评论 -
算法模板之Tarjan判断强连通(HDU 1269 迷宫城堡)
判断是否是一个强连通图模板总结归纳:const int MAXN = 10010; // 点数const int MAXM = 100010; // 边数struct Edge{ int to, next;}edge[MAXM];int head[MAXN], tot;int Low[MAXN], DFN[MAXN], Stack[MAXN], Belong[MAXN]...原创 2018-04-22 22:06:32 · 209 阅读 · 0 评论 -
ACM中的高精度整数与小数的大数运算模板收集与总结
大整数四则运算:普通大数运算,高效的大数运算,加强版大数运算高精度小数加法 HDU 1753 大明 A + B高精度小数乘法 HDU 1063 Exponenetiation基于C++STL——超级高精度浮点数大数计算 ...转载 2018-04-22 23:15:46 · 765 阅读 · 0 评论 -
算法模板之矩阵快速幂(HDU 1757 A Simple Math Problem)
模板总结归纳:typedef long long ll;const int maxn = 110;const int MOD = 1e9+7;#define mod(x) ((x)%MOD)int n;struct mat{ int m[maxn][maxn];}unit;mat operator * (mat a, mat b){ mat ret; ll x; f...原创 2018-04-23 19:21:04 · 200 阅读 · 0 评论 -
算法模板之全排列(next_permutation实现)(HDU 1027 与 HDU 1755)
实战模板题 :HDU 1027 Ignatius and the Princess II#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main(){ int a[1010]; for(int i = 0; i < 1010; i++...原创 2018-04-24 23:30:26 · 206 阅读 · 0 评论 -
算法模板之Dinic最大流(HDU 1532 Drainage Ditches)
模板总结归纳://src 源点, sink汇点, g、e存边的邻接表const int inf = 1000000000; //1e9const int maxn = 20000, maxm = 500000;struct Egde { int v, f, nxt;};int n, src, sink;int g[maxn + 10];int nume;struct Ed...原创 2018-04-25 20:07:55 · 211 阅读 · 0 评论 -
算法模板之拓扑排序(HDU 3342 Legal or Not)
模板总结归纳://拓扑排序//O(|V| + |E|)const int maxn = 1e5+5;vector <int> g[maxn];int du[maxn], n, m, L[maxn]; // L储存拓扑排序结果 bool topsort(){ memset(du, 0, sizeof(du)); for(int i = 0; i < n; i++...原创 2018-04-26 23:46:26 · 220 阅读 · 1 评论 -
算法模板之KMP(HDU 2087 剪花布条)
模板总结归纳:vector <int> kmp(string pattern, string text){ int n = pattern.size(); vector <int> next(n + 1, 0); for(int i = 1; i < n; i++){ int j = 1; while(j > 0){ j = next[j];...原创 2018-04-27 18:43:49 · 248 阅读 · 1 评论 -
算法模板之欧拉函数(HDU 1286 找新朋友)
模板总结归纳:const int Max = 111111;int minDiv[Max], phi[Max], sum[Max];void genPhi(){ for(int i = 1; i < Max; i++){ minDiv[i] = i; } for(int i = 2; i * i < Max; ++i){ if(minDiv[i] == i){ ...原创 2018-04-27 18:45:57 · 181 阅读 · 0 评论 -
算法模板之树状数组(HDU 1166 敌兵布阵)
模板总结归纳://树状数组// O(logn) // HDU 1166 敌兵布阵const int maxn = 100000;int Tree[maxn+10];int lowbit(int x) { return (x&-x); }void add(int x, int value) //给A[i]加上一个数 { for(int i = x; i <= m...原创 2018-04-27 18:47:42 · 209 阅读 · 1 评论 -
算法模板之Miller_Rabin素数测试(HDU 2138 How many prime numbers)
模板总结归纳:#define N 10typedef long long LL; // 必要时候 unsigned LL random(LL n){ return (LL)((double)rand() / RAND_MAX * n + 0.5);}LL multi(LL a, LL b, LL m) //计算a * b % m{ LL ret = 0; wh...原创 2018-04-22 19:30:42 · 211 阅读 · 1 评论 -
算法模板之RMQ线段树(HDU 1754 I Hate It)
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。模板总结归纳:const int MAXNODE = 1 << 19;const int MAXN = 2e6 + 10;struct NODE...原创 2018-04-22 18:36:09 · 210 阅读 · 0 评论 -
算法模板之Dijikstra(HDU 1874 畅通工程续)
模板总结归纳://dijikstra//O(n^2)/*const int MaxN = 1000;int dis[MaxN], g[MaxN][MaxN], N; // N 图中的点数, g边之间的距离, dis节点间最短距离 bool v[MaxN];void dj(){ for(int i = 0; i <= N; i++) dis[i] = INF; dis...原创 2018-03-21 17:39:50 · 224 阅读 · 0 评论 -
算法模板之Kruskal(HDU 1863 畅通工程)
模板总结归纳://Kruskal//O(MlogM)//POJ 2395 HDU 1863 畅通工程 /*struct edge{ int x, y, w;}e[MaxN];int find(int x){ return x == fa[x] ? x : fa[x] = find(fa[x]);}int kruscal(){ sort(e + 1, e + 1 +...原创 2018-03-21 17:44:53 · 157 阅读 · 0 评论 -
算法模板之Floyd(HDU 1874 畅通工程续)
模板总结归纳://Floyd-Warshall//O(n^3)/*const int MaxN = 111;const int INF = 1 << 9;int N, g[MaxN][MaxN]; void floyd(){ for(int k = 1; k <= N; k++) for(int i = 1; i <= N; i++) for(i...原创 2018-03-22 20:45:09 · 151 阅读 · 0 评论 -
算法模板之欧几里得算法(HDU1019 Least Common Multiple)
模板总结归纳://欧几里得算法(辗转相除法) //O(logN)/*int gcd(int a, int b){ return b == 0 ? a : gcd(b, a % b);} */实战模板题 :HDU1019 Least Common Multiple#include<iostream>#include<cstdio>using namespa...原创 2018-03-25 09:02:46 · 202 阅读 · 0 评论 -
算法模板之扩展欧几里得算法(HDU2669 Romantic)
模板总结归纳://扩展欧几里得算法//O(logN)/*int extend_gcd(int a, int b, int &x, int &y){ if(b == 0) { x = 1; y = 0; return a; } else { int r = extend_gcd(b, a % b, y, x); y -= x * (a / b);...原创 2018-03-25 10:08:27 · 209 阅读 · 0 评论 -
算法模板之巴什博弈(HDU 1846 Brave Game & HDU 2149 Public Sale)
巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下...原创 2018-03-28 23:31:57 · 164 阅读 · 0 评论 -
算法模板之斐波那契博弈(HDU 2516 取石子游戏)
有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下:1)先手不能在第一次把所有的石子取完,至少取1颗;2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍。约定取走最后一个石子的人为赢家,求必败态。结论:当n为Fibonacci数的时候,必败。以上均为百度百科中的资料。模板题 : HDU 2516 取石子游戏// HDU 2516 取石子游戏#include<...原创 2018-03-28 23:34:58 · 384 阅读 · 0 评论 -
算法模板之威佐夫博弈(HDU 1527 取石子游戏)
威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、...原创 2018-03-28 23:37:07 · 243 阅读 · 0 评论 -
算法模板之尼姆博弈(HDU 1907 John)
有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论自己如何拿,接下来对手都可...原创 2018-03-28 23:42:41 · 301 阅读 · 0 评论 -
容斥定理 -- 第九届ACM山东省赛F题 Four-tuples (SDUT4219)
Four-tuplesTime Limit: 2000 msMemory Limit: 524288 KiBOutputFor each test case, output one line containing one integer, representing the answer.Sample Input11 1 2 2 3 3 4 4Sample Output1HintSource ...原创 2018-05-08 00:04:44 · 755 阅读 · 1 评论