模板们。。。
注释
这是一个注释。恩。这些模板是给我自己复习用滴,所以只能在我愚笨的认知范围内尽量精妙了。。。。
所有模板默认有加基本头文件如下:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
每个模板都有效果,代码和警告,需要的还会配上其他辅助的东西。。
排序模板
#include<algorithm> sort(a+1,a+n+1);
柯嵩宇大神说sort在编译器中会判断n的大小并选择合适的排序方式,效果比qsort好。
文件读入读出
freopen
(
"in.txt"
,
"r"
,stdin);
freopen
(
"out.txt"
,
"w"
,stdout);
不需要写freclose这种不存在的东东
输出文件也是用freopen打开不是close。。。。。
快速读入
inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; }
并查集寻找祖宗与路径压缩
int find(int x){return x==father[x]?x:father[x]=find(father[x]);} 背吧
黄巨大的代码一定是很精妙滴。虽然我看不懂。
快速读入
inline void readInt(int &x) {
char cc; bool sign = false;
for (cc = getchar(); cc<'0' || cc>'9'; cc = getchar()) if (cc=='-') sign = true;
for (x = cc-'0',cc = getchar(); cc>='0' && cc<='9'; cc = getchar()) x = x*10+cc-'0';
sign && (x=-x);
}
背吧。。
cc是因为。。我原来的代码里面有个c了。。。
最大公因数
//单个数的... (1)正常的 /*int gcd(int a,int b) { while (b!=0) { int tmp=a%b; a=b;b=tmp; } return a; } */ (2)精妙的 int gcd(int x, int y) { return y == 0 ? x : gcd(y, x % y); }
//多个数的... O(nlog常数): 从第三个数开始,每个数和前面的数的gcd求gcd。。。 求gcd时间复杂度是O(log常数),线性扫描是O(n) ,所以如上。。