您的位置:首页 > 编程语言 > C语言/C++

ACM自用常用模板(c++版)

2017-08-11 10:20 288 查看
最近几次比赛每次都被一些题目坑到超时,所以把每次看到比较优秀的模板给抄下来,留着备用。

前面:

typedef long long LL;
//#define MOD xxx
const int MOD=xxx;


1.排列组合公式

//C(m,n)

LL C(int m,int n) {
int k=1;//相当于C(m,n)
LL ans=1;
while(k<=n) {
ans=((m-k+1)*ans)/k;
k++;
}
return ans;
}


2.最大公因数(gcd)

int gcd(int a,int b) {
if(!a)
return b;
int c;
while(b) {//非递归版
c=b;
b=a%b;
a=c;
}
return a;
}


3.快速幂公式

LL qpow(LL a, LL b) {//a的n次方(可取模)
LL ans = 1;
while (b) {
if (b & 1) {
ans *= a;
ans %= MOD;
}
b >>= 1;
a *= a;
a %= MOD;
}
return ans;
}


4.大数运算

详细可见这位写的博客:http://www.cnblogs.com/teble/p/7224597.html

5.超大数据读取(比如acdream 1099题目)+部分排序(STL)

#include<iostream>
#include <algorithm>
#include<cstdio>
using namespace std;
const int N = 10e6;
void scand(int &ans)
{
char c;
ans = 0;
while((c=getchar())<'0' || c>'9');//去掉空格类的东西
while(c>='0'&&c<='9')
ans=(ans<<3)+(ans<<1)+(c-'0'),c=getchar();
}
int a
;
int main()
{
int n,k;
cin>>n>>k;
for(int i = 0 ; i<n;i++)
scand(a[i]);

nth_element(a,a+n-k,a+n);
cout<<a[n-k]<<endl;
}
//nth_element(first,nth,end,compare)
//比如a[10]中找出第2大的数,则为:nth_element(a,a+2-1,a+10) 减一是从第0大开始


后面慢慢补。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 模板