ACMセルフ常用テンプレート(c++版)

3950 ワード

最近の何回かの試合は毎回いくつかの問題がタイムアウトになったので、見るたびに優秀なテンプレートを写して、予備を残しています.
前面:
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
#include 
#include
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[N];
int main()
{
    int n,k;
    cin>>n>>k;
    for(int i = 0 ; icout<//nth_element(first,nth,end,compare)
// えばa[10]で2  に きい を つけると、nth_Element(a,a+2-1,a+10)のマイナス1は0  から

後ろはゆっくり補う...