C++算法竞赛常用编程模板总结

判断某一数字是否为素数(最简单的判断方式)

bool isPrime(int n) {
if(n<=1)
return false;
for(int i=2; i<=sqrt(n); i++)
if (n % i == 0) return false;
return true;
}

求两个数的最大公约数

int gcd(int x,int y) {
return y==0?x:gcd(y,x%y);
}

快速进行素数打表

vector primeTable(int n) {
vector isprime(n, 1); //初始化为n个1
for (int i=2; ii<n; i++) //外层循环i从2到根号n
for (int j=2; j
i<n; j++) //内层循环j从2开始到ij<n
isprime[i
j]=0; //把i的j倍都标记为0
return isprime;
}

比较函数,一般与sort函数共同使用,注意这里写成引用形式会更快

bool cmp(const Student &a, const Student &b) {
if(a.pno!=b.pno)
return a.pno<b.pno;
return a.score>=b.score;
}

并查集

int fa[100]; //定义为全局变量,初始化为自己

// 查找父亲,含路径压缩
int findFather(int x) {
int t = x;
while(x != fa[x])
x = fa[x];
//路径压缩,直接将路径上所有元素的父亲改为最终父亲
while(t != fa[t]) {
int z = t;
t = fa[t];
fa[z] = x;
}
return x;
}

// 合并,即建立它们父亲间的关系
void Union(int a, int b) {
int faA = findFather(a);
int faB = findFather(b);
if(faA != faB) fa[faA] = faB;
}

Sort函数

sort(a,a+10,cmp);
sort(arr.begin(),arr.end(),greater());
sort(arr.begin(),arr.end(),less());

猜你喜欢

转载自blog.csdn.net/qq_41112170/article/details/126774519