神级代码推荐

来源:互联网 发布:淘宝iphone可靠商家 编辑:程序博客网 时间:2024/04/27 13:56

这些是我看到的一些有趣的代码

/*                                    :Zu                                   iB@B@i                                                                                      iGM;                                  i@@B@@@B2                                                                                 7B@B@B@.                                  @@@@B@B@B@u                                                                            iM@B@B@B@BL                                 B@B@N  OB@@@BY                                                                        F@@@B@BMM@B@O                                E@B@B    .O@B@B@:                                                                   :BB@@@B@0U7FB@B@                               :@B@B.      .@B@B@O                                                                YB@B@B@OSYJjuU@B@B                               @B@B5         rB@B@B7                                                            u@B@B@BNuYj1UFuuB@B@i                              2@@@@            N@@@@M                                                         5B@B@BBkjYU252511JMB@B1                              @@B@i             :@@@B@                                                      J@B@@@MFLju515151FUJE@B@M                             F@B@B                @@@B@,                                                  iB@B@@B1YJ12F152F1511JPB@B@                             @B@B:                 EB@@@.                            . .::::....         O@@B@BSLuU51F151F15152u2@B@B                            L@@B@                   0B@B@        .:rLuk8MB@B@B@B@B@B@@@B@B@B@B@@@@@B@B@G@@@B@PuY2251F1F151F1F1Fu2B@B@.                            B@@@Y                    @B@BB2MB@B@@@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BMujU52F1F151525151511Y@@@Bi                            @B@B                      @B@@@B@@@B@@@B@@@BBZNuu7ri:,,..        B@B@0kN88MB@BEYu252525151F252F1F15UJM@B@J                           JB@B@                      0@B@@BE17i,.                           @B@BUvJYJLJjUj125151F152525151F1F55YO@@BX                           B@B@v                                                            .B@B@jUU5252221212F2515251F15252F1F2JE@B@O                           @B@B.                                                             @B@BFJF1F2F2F2F2515151F152F251F5515YEB@B@                          .B@@@                                                              B@B@ELU52F152F251525151515252F1F2F2JX@B@B                          v@B@B                                                              vB@B@uj255F15151F2F15252515151F1S15JNB@B@                          PB@BX                                                               @B@BBYu2F1F1F2F15152F2515151F152F1jP@B@B                          B@B@v                                                                @B@BBjJu5251S25151F15251515151F15JNB@@B                          BB@@:                                                                 @B@B@XYL2UF151F15151F2F251F2F251j0@B@B                          B@B@i                                                                  @B@B@BPJJJU251111152525152121Uuv1B@B@B.                        FB@B@B                                                                    vB@B@B@ZSjjLujUu1U1u2u2uuJJLj2XZ@@@B@@:                       @B@B@u                                                                       v@@@B@B@MOXkuujuJjJuu55qEMB@@@B@B@B@Bi                     :@B@B@                                                                           :P@B@B@@@B@B@B@B@B@B@@@B@B@B@U L@B@Bi                    r@B@BE                                                                               .vO@@B@B@B@B@B@B@B@B@MU:     Y@B@B,                   r@B@Bu                                                                                      ,rL52F15Uv;:            k@B@B                  ,@@@BJ                                                          :BB1                                                  B@B@M      .           @B@BP                               .5X,                        @B@B@Bv                                                B@B@:    r@B@@@@Mu:   BB@B@                               .B@B@                        .8B@B@B@BF,                                            uB@B@    7B@B@B@@@B@B8B@@@                               7B@B@M                           iMB@B@@@B@Xr.                                        @B@B:      .:iJZ@B@B@B@@@k                            :5@B@B@X                               ,SB@B@B@B@B@BPYi..                                P@B@Z             .rB@B@B@BMi             r@BONE0EM@B@B@B@B@:                                    i5@B@@@B@B@B@@@B@                             :B@B@               @B@B@B@B@O            @B@B@B@@@@@B@@@5.                                           :LEB@B@B@B@B:                             @B@B              iB@B@ iB@B7            :ZM@B@B@BO57,                                                       .:i                               B@B@ii2OOk              M@B@2                                                                                                                        @B@B@B@B@@@              @B@B.                                                                   .jOM07                                           .UB@B@B@B@@@B@r             .B@B@                                                                   MB@B@@@B7                                        M@B@B@B@Bi             r@B@B                                7O@@BJ                            SB@B@B@B@B.                                       PB@BP@@B@             uB@BO                               @@@B@B@Br                          8@@@B@B@B@:                                            @B@B             S@@@F                              @B@B@B@B@@                          .B@B@B@B@B                                            ZB@Bk             SB@B1                              B@B@B@B@@@                            5@B@B@7                                             B@B@.             v@B@k                              .B@@@@@B@r                                                                               2@B@B             vB@B@:r7;                            vBB@BF                                                                                 @B@B:    :71Z@B@B@B@B@B@B@BM                                                                                                                 8B@BEv@B@B@B@@@B@B@@@B@B@B@r                                                                                                            @B@B@B@@@:@B@B@B@BMFJi: MB@BJ                                                                                                               .B@B@B@B@@@B@Ov .7:          :@B@@                                                                                                                  ;@@B@B@B@B@@@@2               B@B@v                                                                                                                 Z@@@B  ,LMB@B@B@r               rB@B@                                                                                                                B@B@B       .EB@B@                @B@BM                                                                                                             .B@B@B          .M@j                 @B@B1                                                                                                           rB@@@M                 :@B@Bj                                              i8B@B@B@B@B@Bu                                             GB@B@F                  i@B@BX                                            M@@@B@@@B@B@B@B@                                          :@@@B@i                   i@B@B@                                           7B@BFri:,:ivOB@X                                        ,B@B@BM                    .@B@B@L                                                                                               ,BB@@@Bi                      qB@B@@7                                                                                           jB@B@B@L                       :B@B@B@2.                                                                                     JB@@@B@Bv                         :@B@B@B@u.                                                                              ,FB@B@B@BP,                           .S@B@B@B@0r                                                                       :jBB@B@B@@@B.                              :P@B@B@B@BOv,                                                          .:7kO@B@B@B@@@B@B@@@                                 .vBB@B@B@@@B@ONjr:,                                       ,:rYXE@B@@@@@@@B@@@B@MEuri@@@B.                                     J@B@B@B@B@B@@@@@B@B@B@@BM8ENFPFUuUuuuU5XFP0GOMB@B@B@B@B@@@B@B@B@B@B@BMX2vr::::,iB@B@                                     rB@BM71NMB@B@B@@@B@@@@@B@B@B@B@B@@@B@@@B@@@B@B@B@B@@@B@@@B@BBZqULri:::::::;;rr:r@B@B.                                     u@B@E.,::::iirvLJFFN0OOMM@B@BMO@B@B@@@B@B@@@@@B@MuL2JY77ii:::::::ii;irrrr7r7rr:iB@B@.                                     1B@BZ,;rr;;ii:i::::::::::::,.:Z@@B@B@quLYJqB@B@B@q: ::::ii;;rrrr7rrr7r7rrii::::u@B@B.                                     F@@@P.::i;rrrrrrrrrr;r;r;ri,7@@@@@u.         L@@B@BL,rr7r7r7r7rrrrrrii::::iLSBB@B@B@:                                     OB@B@EF7;::,::ii;ir;rrrrr;:7@B@BO   .....      N@@@BL:rrrrri;ii:::::irLF8B@B@B@B@B@Bv                                     Z@B@@@B@B@MZ5J7ri:::,:::::,@B@@E  .,,:,,..      N@B@B,.:::::i;7j2NO@B@B@B@B@B@E:F@B@P                                     @B@BBB@@@B@B@B@@@B@MOqX1u7UB@B@  .:,,,,..  ,.    B@B@k1NOM@B@B@@@B@B@B@B@BSi    iB@B@                                    iB@B@   iYG@@@@B@@@B@B@@@B@B@B@M  ,,:,,., rB@B@5. ZB@B@B@B@@@B@@@B@BBF7,          @B@B                                    B@B@u          :rjSO@@B@B@B@B@B@  .,,,.,. r@@@@@B8M@B@B@B@BOFu;:.                 B@B@i                                   S@B@B                        @B@@r  .......  :5@B@B@B@B                            5B@BB                                  L@@@B,                        7@B@Bi   . . .     .B@B@Bu                             @B@@.                                 G@B@B;                          q@B@Bk            7@B@BM                              G@B@@                                B@B@B:                            L@B@B@O7.    .rOB@B@Bu                                B@B@B                                qB@M                                ZB@B@@@B@@@B@B@B@Z                                  .B@@@B                                                                      7MB@B@B@B@B@Mv                                      S@8.                                                                          ,:7ri.                         ...                    .                                     ..        ..                  :7FB2  B@B   r.              :@B.                                  L@@        @B                      ,.,.,..         .@@@@B@B@B@@@B  OB@  L@BO             j@@      B@B@B@B@B@B@@@B@     0PXSXSSJMB@L5FXSSuNB@u5SXSXXZi     ,,,,., iB@B@@@@ B@B@B@B@@@B@M          @BOurE@B       F@B    M@@M:          O@i      :::,:,,..  :@B@O     @@@@B@@@B@B@B@B@B@@@B@B@@@B@B2     @B@B@B .@E  .B@ .,,.... @BL..               rBB       rB@      B@Y      vEFL@BNuF2uj           u@BX               .B5        F5              B@  B@  BE  O@.         q@               v@B       :@@               E@B@B@B@B@@@         XB@P           k1jujjSMG0qPqMB@BBB@B@B@v        @B  B@  @0  @B  iLUUuY. ZB,         @B@B@B@B@B@B@@@B@B@B@B@B@B@B@B       L@u   .@B        @@@             @B@B@BBOMOM@E2PXqkLi:vi,.        @@  B@  Bq 0B,  B@@@@@Y N@:         ii::,.S@B .:,:,.:@@i.::,.   ,i       @B.   JBq        0@1               iJ      r@Y        @@          @B  @B  @1 B@   MB  .B7 NB:               7B@        @@      :@7        :@@    B@i.:::::: MBO ,::::i        MB@      B@O     E@B7          B@  B@  Bk @B:  O@  ,@r k@,               r@M    r5  @Bu    5@Bk        M@v    @B B@B@B@B@B@@@B@B@B@:        5B@.     BE   r@@F            @B  @B  @E  @B  OB. :B7 PB:             ,:MB@B@B@B@. U@B  .@@@.        .@B    PB8         E@q                 ;i     .O;    J              B@  B@  B8  :@q E@  .@r k@,         B@B@@@B@BPu7,     B@ uB@5           v@@S  B@          E@E           UEkk5277J1YvrBB@r7LYrLUFFkkqE:     @B  MB  @Z   B@ PBi YBv NB:         0Mui. LBB         MB@BB               7B@B@:          OBO           @B@B@B@B@O@B@B@B@B@O@B@B@@@B@;     @@  @@ .@0   @B P@B@B@v N@:               v@B        qB@Br     iXi          B@BP          8@O                    7@@ iBX @Bi               @B@B@B  @B7v@BG @B:     OB:               JB@     JB@B51@B     M@@        LB@:rB@Bi       GBM                 ,B@BL  r@8  vB@8,           .@@  5@ .@Gq@Bv   ,      Z@:               L@B  PB@B@J   M@B.   @@7      i@B@    0@7       B@M              iO@@@r    YBB    r@B@BY.        :.     :@q              MB:          G@N5S@BB  Z@S.      P@BZ.uB@     ,B@B7         UB@B@@@B:           OB@@@5       j@B       L@B@B@,            iBB         FMq1OB@          2B@B@MJ              :@B@B@:      Sj            NFXF5i             ,@u          qB@          .Y.             i@O         Y@B@BZ.                                  ..                                                      :Ur                           k   :..,,       r  ii      v:   ir .L         E         ..,,:,iivv    :..   ,F      :  u   .:iu1                        .u5BjL:i@@rB@     @k  :Bi    7@Bu. uMiNBuL ,@SSuEB5qZUO8  :qN1uM@7777:  :v@B i2X@vS@   Bv @ 7B7v7i:                          .@   ,B  UB   v@:     BX   Li O O7u 2 O.  28 .Br,S :B.  r7vvrE@7vjLL   :B  Yiv@:7@j  BqiB 7B                        :LuB27i8  uG  .B@r..:ii,,F@: JO1@ 0;F B7@:   Lr rOui k.    M1::2@:ii@   ,BqF  i7@,78   ON.. rB@Y7Z@                         2 @r  NY55E:    r:@B77rBr   :2@.v1ik .@.,  uM ,OG:Bq Br   @5::2@,:iB,  ,, @ :;vBiii   @8ir vJY7 Mu                         B 8E7 B   0O     .@    @i   :@B7  Mi 5B5: .P: i,BF j i2   5Yi:F@:ii8   .B7G 77J@rvJ:  B7 @ P7 BPG                        :@k@.  @v7rO7    2B     B     B,  i@   @   iJujLr@G77uJU  .7r7iNBi;7rr   uBL :.:B  .. .@  B B  BBJ                        @i 1ZXqkEq0X0  7@P  qk0B5    BE  7@    B         B7       ZXF2U8@j11k0r YB.rSuuuGjUkX 1P  @PXv@i X@:                                            .,.                          .*/#include <bits/stdc++.h>using namespace std;#define INF        (~(1<<31))#define INFLL      (~(1ll<<63))#define pb         push_back#define mp         make_pair#define abs(a)     ((a)>0?(a):-(a))#define lalal      puts("*******");#define s1(x)      scanf("%d",&x)#define Rep(a,b,c) for(int a=(b);a<=(c);a++)#define Per(a,b,c) for(int a=(b);a>=(c);a--)#define pair1      first#define pair2      secondtypedef long long int LL ;typedef unsigned long long int uLL ;const LL     MOD = 1e18;const int    N   = 100000+5;const double eps = 1e-8;const double PI  = acos(-1.0);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;}void fre(){    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);}inline LL _gcd(LL a,LL b){return (b==0)?a:_gcd(b,a%b);}inline LL _lcm(LL a,LL b){return (a/_gcd(a,b)*b);    }/***********************************************************************/struct Complex{    double real, image;    Complex(double _real, double _image){        real = _real;        image = _image;    }    Complex(){}};Complex *AA = new Complex[N<<2],*BB = new Complex[N<<2];Complex operator + (const Complex &c1, const Complex &c2){    return Complex(c1.real + c2.real, c1.image + c2.image);}Complex operator - (const Complex &c1, const Complex &c2){    return Complex(c1.real - c2.real, c1.image - c2.image);}Complex operator * (const Complex &c1, const Complex &c2){    return Complex(c1.real*c2.real - c1.image*c2.image, c1.real*c2.image + c1.image*c2.real);}int rev(int id, int len){    int ret = 0;    for(int i = 0; (1 << i) < len; i++){        ret <<= 1;        if(id & (1 << i)) ret |= 1;    }    return ret;}Complex A[N<<2];void FFT(Complex *a, int len, int DFT){    for(int i = 0; i < len; i++)        A[rev(i, len)] = a[i];    for(int s = 1; (1 << s) <= len; s++)    {        int m = (1 << s);        Complex wm = Complex(cos(DFT*2*PI/m), sin(DFT*2*PI/m));        for(int k = 0; k < len; k += m)        {            Complex w = Complex(1, 0);            for(int j = 0; j < (m >> 1); j++)            {                Complex t = w*A[k + j + (m >> 1)];                Complex u = A[k + j];                A[k + j] = u + t;                A[k + j + (m >> 1)] = u - t;                w = w*wm;            }        }    }    if(DFT == -1) for(int i = 0; i < len; i++) A[i].real /= len, A[i].image /= len;    for(int i = 0; i < len; i++) a[i] = A[i];    return;}int a[N],b[N];int ans[N<<2];int main(){    int n,m;    while(~scanf("%d %d",&n,&m)){        int la = n+1,lb = m+1;        int sa,sb;        sa=sb=0;        while((1<<sa)<la) sa++;        while((1<<sb)<lb) sb++;        int len = (1<<(max(sa,sb)+1));        for(int i=0;i<la;i++) scanf("%d",&a[i]);        for(int i=0;i<lb;i++) scanf("%d",&b[i]);        for(int i=0;i<len;i++){            AA[i]=Complex(((i<la)?(a[la-i-1]):0),0);            BB[i]=Complex(((i<lb)?(b[lb-i-1]):0),0);        }        FFT(AA,len,1);        FFT(BB,len,1);        for(int i=0;i<len;i++)  AA[i]=AA[i]*BB[i],ans[i]=0;        FFT(AA,len,-1);        for(int i=0;i<len  ;i++) ans[i]+=(int)(AA[i].real+0.5);        for(int i=la+lb-2;i>=0;--i)  printf("%d%c",ans[i],i?' ':'\n');    }    return 0;}/**1 13 11 9*//*                   _ooOoo_                  o8888888o                  88" . "88                  (| -_- |)                  O\  =  /O               ____/`---'\____             .'  \\|     |//  `.            /  \\|||  :  |||//  \           /  _||||| -:- |||||-  \           |   | \\\  -  /// |   |           | \_|  ''\---/''  |   |           \  .-\__  `-`  ___/-. /         ___`. .'  /--.--\  `. . __      ."" '<  `.___\_<|>_/___.'  >'"".     | | :  `- \`.;`\ _ /`;.`/ - ` : | |     \  \ `-.   \_ __\ /__ _/   .-` /  /======`-.____`-.___\_____/___.-`____.-'======                   `=---='^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         佛祖保佑       永无BUG*/

排版好差
自己粘下来看吧

/*  Number theory template :    Deals with various aspects of integer, division, modulo, etc.*/#include <bits/stdc++.h>namespace number {    const double PI = acos (-1);    /*  Basic constants & functions :            long long inverse (const long long &x, const long long &mod) :                returns the inverse of x modulo mod.                i.e. x * inv (x) % mod = 1.            int fpm (int x, int n, int mod) :                returns x^n % mod. i.e. Fast Power with Modulo.            void euclid (const long long &a, const long long &b,                         long long &x, long long &y) :                solves for ax + by = gcd (a, b).            long long gcd (const long long &a, const long long &b) :                solves for the greatest common divisor of a and b.            long long mul_mod (const long long &a, const long long &b, const long long &mod) :                returns a * b % mod.            long long llfpm (const long long &x, const long long &n, const long long &mod) :                returns x^n % mod.    */    long long abs (const long long &x) { return x > 0 ? x : -x; }    long long inverse (const long long &x, const long long &mod) {        if (x == 1) return 1;        return (mod - mod / x) * inverse (mod % x, mod) % mod;    }    int fpm (int x, int n, int mod) {        register int ans = 1, mul = x;        while (n) {            if (n & 1) ans = int (1ll * ans * mul % mod);            mul = int (1ll * mul * mul % mod);            n >>= 1;        }        return ans;    }    void euclid (const long long &a, const long long &b,                 long long &x, long long &y) {        if (b == 0) x = 1, y = 0;        else euclid (b, a % b, y, x), y -= a / b * x;    }    long long gcd (const long long &a, const long long &b) {        if (!b) return a;        long long x = a, y = b;        while (x > y ? (x = x % y) : (y = y % x));        return x + y;    }    long long mul_mod (const long long &a, const long long &b, const long long &mod) {        long long ans = 0, add = a, k = b;        while (k) {            if (k & 1) ans = (ans + add) % mod;            add = (add + add) % mod;            k >>= 1;        }        return ans;    }    long long llfpm (const long long &x, const long long &n, const long long &mod) {        long long ans = 1, mul = x, k = n;        while (k) {            if (k & 1) ans = mul_mod (ans, mul, mod);            mul = mul_mod (mul, mul, mod);            k >>= 1;        }        return ans;    }    /*  Discrete Fourier transform :            int dft::init (int n) : initializes the transformation with dimension n.            void dft::solve (complex *a, int n, int f) :                transforms array a with dimension n to its image representation.                Transforms back when f = 1.    */    template <int MAXN = 1000000>    struct dft {        typedef std::complex <double> complex;        static complex e[2][MAXN];        int init (int n) {            int len = 1;            for (; len <= 2 * n; len <<= 1);            for (int i = 0; i < len; i++) {                e[0][i] = complex (cos (2 * PI * i / len), sin (2 * PI * i / len));                e[1][i] = complex (cos (2 * PI * i / len), -sin (2 * PI * i / len));            }            return len;        }        void solve (complex *a, int n, int f) {            for (int i = 0, j = 0; i < n; i++) {                if (i > j) std::swap (a[i], a[j]);                for (int t = n >> 1; (j ^= t) < t; t >>= 1);            }            for (int i = 2; i <= n; i <<= 1)                for (int j = 0; j < n; j += i)                    for (int k = 0; k < (i >> 1); k++) {                        complex A = a[j + k];                        complex B = e[f][n / i * k] * a[j + k + (i >> 1)];                        a[j + k] = A + B;                        a[j + k + (i >> 1)] = A - B;                    }            if (f == 1) {                for (int i = 0; i < n; i++)                    a[i] = complex (a[i].real () / n, a[i].imag ());            }        }    };    /* Number-theoretic transform :        void ntt::solve (int *a, int n, int f, int mod, int prt) :            transfers a[n] to its image representation.            Converts back if f = 1.            Requries specific mod and corresponding prt to work. (given in MOD and PRT)        int ntt::crt (int *a, int mod) :            fixes the results a from module 3 primes to a certain module mod.    */    template <int MAXN = 1000000>    struct ntt {        void solve (int *a, int n, int f, int mod, int prt) {            for (register int i = 0, j = 0; i < n; i++) {                if (i > j) std::swap (a[i], a[j]);                for (register int t = n >> 1; (j ^= t) < t; t >>= 1);            }            for (register int i = 2; i <= n; i <<= 1) {                static int exp[MAXN];                exp[0] = 1;                exp[1] = fpm (prt, (mod - 1) / i, mod);                if (f == 1) exp[1] = fpm (exp[1], mod - 2, mod);                for (register int k = 2; k < (i >> 1); k++) {                    exp[k] = int (1ll * exp[k - 1] * exp[1] % mod);                }                for (register int j = 0; j < n; j += i) {                    for (register int k = 0; k < (i >> 1); k++) {                        register int &pA = a[j + k], &pB = a[j + k + (i >> 1)];                        register int A = pA, B = int (1ll * pB * exp[k] % mod);                        pA = (A + B) % mod;                        pB = (A - B + mod) % mod;                    }                }            }            if (f == 1) {                register int rev = fpm (n, mod - 2, mod);                for (register int i = 0; i < n; i++) {                    a[i] = int (1ll * a[i] * rev % mod);                }            }        }        int MOD[3] = {1045430273, 1051721729, 1053818881}, PRT[3] = {3, 6, 7};        int crt (int *a, int mod) {            static int inv[3][3];            for (int i = 0; i < 3; i++)                for (int j = 0; j < 3; j++)                    inv[i][j] = (int) inverse (MOD[i], MOD[j]);            static int x[3];            for (int i = 0; i < 3; i++) {                x[i] = a[i];                for (int j = 0; j < i; j++) {                    int t = (x[i] - x[j] + MOD[i]) % MOD[i];                    if (t < 0) t += MOD[i];                    x[i] = int (1LL * t * inv[j][i] % MOD[i]);                }            }            int sum = 1, ret = x[0] % mod;            for (int i = 1; i < 3; i ++) {                sum = int (1LL * sum * MOD[i - 1] % mod);                ret += int (1LL * x[i] * sum % mod);                if (ret >= mod) ret -= mod;            }            return ret;        }    };    /*  Chinese remainder theroem :            bool crt::solve (const std::vector <std::pair<long long, long long> > &input,                            std::pair<long long, long long> &output) :                solves for an integer set x = output.first + k * output.second                    that satisfies x % input[i].second = input[i].first.                Returns whether a solution exists.    */    struct crt {        long long fix (const long long &a, const long long &b) {            return (a % b + b) % b;        }        bool solve (const std::vector <std::pair <long long, long long> > &input,                    std::pair <long long, long long> &output) {            output = std::make_pair (1, 1);            for (int i = 0; i < (int) input.size (); ++i) {                long long number, useless;                euclid (output.second, input[i].second, number, useless);                long long divisor = gcd (output.second, input[i].second);                if ((input[i].first - output.first) % divisor) {                    return false;                }                number *= (input[i].first - output.first) / divisor;                number = fix (number, input[i].second);                output.first += output.second * number;                output.second *= input[i].second / divisor;                output.first = fix (output.first, output.second);            }            return true;        }    };    /*  Miller Rabin :            bool miller_rabin::solve (const long long &) :                tests whether a certain integer is prime.    */    struct miller_rabin {        int BASE[12] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};        bool check (const long long &prime, const long long &base) {            long long number = prime - 1;            for (; ~number & 1; number >>= 1);            long long result = llfpm (base, number, prime);            for (; number != prime - 1 && result != 1 && result != prime - 1; number <<= 1)                result = mul_mod (result, result, prime);            return result == prime - 1 || (number & 1) == 1;        }        bool solve (const long long &number) {            if (number < 2) return false;            if (number < 4) return true;            if (~number & 1) return false;            for (int i = 0; i < 12 && BASE[i] < number; ++i)                if (!check (number, BASE[i]))                    return false;            return true;        }    };    /*  Pollard Rho :            std::vector <long long> pollard_rho::solve (const long long &) :                factorizes an integer.    */    struct pollard_rho {        miller_rabin is_prime;        const long long threshold = 13E9;        long long factorize (const long long &number, const long long &seed) {            long long x = rand() % (number - 1) + 1, y = x;            for (int head = 1, tail = 2; ; ) {                x = mul_mod (x, x, number);                x = (x + seed) % number;                if (x == y)                    return number;                long long answer = gcd (abs (x - y), number);                if (answer > 1 && answer < number)                    return answer;                if (++head == tail) {                    y = x;                    tail <<= 1;                }            }        }        void search (const long long &number, std::vector<long long> &divisor) {            if (number > 1)  {                if (is_prime.solve (number))                    divisor.push_back (number);                else {                    long long factor = number;                    for (; factor >= number;                            factor = factorize (number, rand () % (number - 1) + 1));                    search (number / factor, divisor);                    search (factor, divisor);                }            }        }        std::vector <long long> solve (const long long &number) {            std::vector <long long> ans;            if (number > threshold)                search (number, ans);            else {                long long rem = number;                for (long long i = 2; i * i <= rem; ++i)                    if (number % i)                        ++i;                    else {                        ans.push_back (i);                        rem %= i;                    }            }            return ans;        }    };    /*  Adaptive Simpson's method :            double simpson::solve (double (*f) (double), double l, double r, double eps) :                integrates f over (l, r) with error eps.    */    struct simpson {        double area (double (*f) (double), double l, double r) {             double m = l + (r - l) / 2;            return (f (l) + 4 * f (m) + f (r)) * (r - l) / 6;        }        double solve (double (*f) (double), double l, double r, double eps, double a) {            double m = l + (r - l) / 2;            double left = area (f, l, m), right = area (f, m, r);            if (fabs (left + right - a) <= 15 * eps) return left + right + (left + right - a) / 15.0;            return solve (f, l, m, eps / 2, left) + solve (f, m, r, eps / 2, right);        }        double solve (double (*f) (double), double l, double r, double eps) {            return solve (f, l, r, eps, area (f, l, r));        }    };}using namespace number;typedef std::complex <double> complex;template <int MAXN> std::complex <double> dft <MAXN>::e[2][MAXN];const int MAXN = 1000000;dft <> m_dft;int N, M;complex A[MAXN], B[MAXN], C[MAXN];int main () {    scanf ("%d%d", &N, &M);    for (int i = 0; i < N + 1; ++i) {        int tmp;        scanf ("%d", &tmp);        A[i] = complex (tmp, 0);    }    for (int i = 0; i < M + 1; ++i) {        int tmp;        scanf ("%d", &tmp);        B[i] = complex (tmp, 0);    }    int size = N + M + 1;    int len = m_dft.init (size);    m_dft.solve (A, len, 0);    m_dft.solve (B, len, 0);    for (int i = 0; i < len; ++i)        C[i] = A[i] * B[i];    m_dft.solve (C, len, 1);    for (int i = 0; i < N + M + 1; ++i)        printf ("%d%c", int (C[i].real () + .5), " \n"[i == size - 1]);    return 0;}

超级强的模板

#include <iostream>#include <cstdio>#include <map>#include <set>#define st(now) ((isvar[now])?var[st[now]]:st[now])using namespace std;int In,input[1000],len,dep=0,funsum,retu,PA,read=0;bool RETU;int varsum[100000],var[3000000],funstart[1000],pa[1000],pasum[1000],wei[3000000][20],weisum[3000000];string par[1000][100],code;set<char> s1;//实词集合(控制、函数、变量) set<char> s2;//表达式字符集合 set<char> s3;//数字集合 map<string,int> m1[100000];//变量映射 map<string,int> m2;//函数映射 void init()//初始化 {    In=2;    cin >> input[1] >> input[2];    code="int main(){ int a,b;cin >> a >> b;cout << a+b;}";    bool flag=1;    for(char ch='a';ch<='z';ch++) s1.insert(ch),s2.insert(ch);    for(char ch='A';ch<='Z';ch++) s1.insert(ch),s2.insert(ch);    for(char ch='0';ch<='9';ch++) s1.insert(ch),s2.insert(ch),s3.insert(ch);    s1.insert('_');s2.insert('_');    s2.insert('(');s2.insert(')');    s2.insert('+');s2.insert('-');s2.insert('*');s2.insert('/');s2.insert('%');    s2.insert('!');s2.insert('&');s2.insert('|');s2.insert('=');s2.insert('<');s2.insert('>');s2.insert('^');    s2.insert('[');s2.insert(']');    code.erase(0,1);    for(int i=0;i<=code.length();)        if((code[i]==' '||code[i]=='\n'||code[i]=='\t')&&((!s1.count(code[i-1])) || (!s1.count(code[i+1]))))            code.erase(i,1);        else i++;    varsum[0]=1;len=code.length();RETU=0;PA=0;}int level(int &now)//符号转成运算级 {    switch(code[now])    {        case'<':if(code[++now]=='=')return 6;                    else {now--;return 8;}        case'>':if(code[++now]=='=')return 7;                    else {now--;return 9;}        case'=':if(code[++now]=='=')return 4;                    else {now--;return 0;}        case'!':now++;return 5;        case'|':now++;return 1;        case'&':now++;return 2;        case'^':return 3;        case'+':return 10;        case'-':return 11;        case'*':return 12;        case'/':return 13;        case'%':return 14;    }}bool dayu(int a,int b){    if(a==0) return 0;    if(a>=b) return 1;    if((a==4)&&(b==5))return 1;    if((a>=6)&&(a<=9)&&(b>=6)&&(b<=9)) return 1;    if((a==10)&&(b==11)) return 1;    if((a>=12)&&(a<=14)&&(b>=12)&&(b<=14)) return 1;    return 0;}int word(int now)//找下一个单词(变量 int 函数之类的) {    int end;    for(end=now;s1.count(code[end]);end++);    return end;}int express(int now)//找下一个表达式 {    int end;    for(end=now;s2.count(code[end]);end++);    return end;}int pass(int now){    while(code[now]!=';') now++;    return now+1;}int block(int now)//跳过一段程序 {    if(code[now]=='{')    {        int dep=1;        for(now++;dep;now++) if(code[now]=='{') dep++;else if(code[now]=='}') dep--;        return now;    }    else    {        int next=word(now);        if((next-now==3 && code.substr(now,3)=="for")||(next-now==5 && code.substr(now,5)=="while"))        {            int p=next+1,deep=1;            while(deep)            {                if(code[p]=='(') deep++;                if(code[p]==')') deep--;                p++;            }            return block(p);        }        else        if(next-now==2 && code.substr(now,2)=="if")        {            int p=next+1,deep=1;            while(deep)            {                if(code[p]=='(') deep++;                if(code[p]==')') deep--;                p++;            }            p=block(p);            next=word(p);            if(next-p==4 && code.substr(p,4)=="else")                return block(next);            else return p;        }        else        {            int p=now;            while(code[p]!=';') p++;            return p+1;        }    }}int num(int &now)//得到最近的十进制数 {    int sum=0;    while(s3.count(code[now]))        sum=sum*10+code[now++]-'0';    return sum;}int getsize(int &now,int k)//得到数组的大小 {    int sum=1;    while(code[now]=='[')    {        now++;        int tem=num(now);        wei[k][++weisum[k]]=tem;        sum*=tem;        now++;    }    return sum;}int focus(int &next,int first)//得到所要的变量在数组中的位置 {    int calc(int &now);    int sum=0,SUM=1,i=0;    if(code[next]=='[')    {        while(code[next]=='[')        {            next++;i++;            sum+=SUM*calc(next);            SUM*=wei[first][i];            next++;        }    }    return sum;}int newfun(int beg,int end)//定义新函数 {    m2[code.substr(beg,end-beg)]=++funsum;int i=0;    for(int next=word(end+1);code[end++]!=')';end=next,next=word(end+1))        if(next-end!=3 || code.substr(end,3)!="int")            par[funsum][++i]=code.substr(end,next-end);     pasum[funsum]=i;    funstart[funsum]=end++;    for(int dep=1;dep;end++) if(code[end]=='{') dep++;else if(code[end]=='}') dep--;    return end;}int newvar(int beg)//定义新变量 {    int end;    for(end=beg;code[end]!=';';beg=end+1)    {        end=word(beg),m1[dep][code.substr(beg,end-beg)]=varsum[dep];        int from=varsum[dep];weisum[varsum[dep]]=0;        for(varsum[dep]+=getsize(end,varsum[dep]);from<=varsum[dep];from++) var[from]=0;    }    return end+1;}int newdep()//新的一层 {    varsum[dep+1]=varsum[dep];m1[dep+1]=m1[dep];dep++;}int calc(int &now)//表达式求值 {    int run(int now,bool isfun);    int fh[20],st[20];bool isvar[20];int top=0,pre[10],presum=0;    for(;code[now]!=';' && code[now]!=')' &&(code[now]!='<' || code[now+1]!='<')&&(code[now]!=']')&&(code[now]!=',');)        if(s3.count(code[now]))        {            st[++top]=num(now);            while(presum>0)            {                if(pre[presum]==1) st[top]=!st[top];                if(pre[presum]==2) st[top]=-st[top];                presum--;            }            isvar[top]=0;fh[top]=-1;        }        else        if(s1.count(code[now]))        if(m1[dep].count(code.substr(now,word(now)-now)))        {            int next=word(now),first=m1[dep][code.substr(now,word(now)-now)];            st[++top]=first+focus(next,first);isvar[top]=1;            while(presum>0)            {                st[top]=st(top);isvar[top]=0;                if(pre[presum]==1) st[top]=!st[top];                if(pre[presum]==2) st[top]=-st[top];                presum--;            }            fh[top]=-1;now=next;        }        else        {            int End=word(now),all=0,end=End+1;            while(code[end]!=')')                pa[++all]=calc(end),end+=code[end]==',';            PA=m2[code.substr(now,End-now)];retu=0;            run(funstart[PA],1);            st[++top]=retu;fh[top]=-1;isvar[top]=0;            while(presum>0)            {                if(pre[presum]==1) st[top]=!st[top];                if(pre[presum]==2) st[top]=-st[top];                presum--;            }            now=end+1;        }        else        if(code[now]=='(')        {            now++;            st[++top]=calc(now);            while(presum>0)            {                if(pre[presum]==1) st[top]=!st[top];                if(pre[presum]==2) st[top]=-st[top];                presum--;            }            isvar[top]=0;fh[top]=-1;now++;        }        else        if(!top || fh[top]!=-1)         while(code[now]=='!' || code[now]=='-' || code[now]=='+')        switch(code[now])        {            case'!':pre[++presum]=1;now++;break;            case'-':pre[++presum]=2;now++;break;            case'+':now++;break;        }        else        {            int newlevel=level(now);            while(top>1 && dayu(fh[top-1],newlevel))            switch(fh[--top])            {                case 0:var[st[top]]=st(top+1);st[top]=st(top+1);isvar[top]=0;break;                case 1:st[top]=st(top)||st(top+1);isvar[top]=0;break;                case 2:st[top]=st(top)&&st(top+1);isvar[top]=0;break;                case 3:st[top]=st(top)^st(top+1);isvar[top]=0;break;                case 4:st[top]=st(top)==st(top+1);isvar[top]=0;break;                case 5:st[top]=st(top)!=st(top+1);isvar[top]=0;break;                case 6:st[top]=st(top)<=st(top+1);isvar[top]=0;break;                case 7:st[top]=st(top)>=st(top+1);isvar[top]=0;break;                case 8:st[top]=st(top)<st(top+1);isvar[top]=0;break;                case 9:st[top]=st(top)>st(top+1);isvar[top]=0;break;                case 10:st[top]=st(top)+st(top+1);isvar[top]=0;break;                case 11:st[top]=st(top)-st(top+1);isvar[top]=0;break;                case 12:st[top]=st(top)*st(top+1);isvar[top]=0;break;                case 13:st[top]=st(top)/st(top+1);isvar[top]=0;break;                case 14:st[top]=st(top)%st(top+1);isvar[top]=0;break;            }            fh[top]=newlevel;now++;        }    for(top--;top>0;top--)    switch(fh[top])    {        case 0:var[st[top]]=st(top+1);st[top]=st(top+1);isvar[top]=0;break;        case 1:st[top]=st(top)||st(top+1);isvar[top]=0;break;        case 2:st[top]=st(top)&&st(top+1);isvar[top]=0;break;        case 3:st[top]=st(top)^st(top+1);isvar[top]=0;break;        case 4:st[top]=st(top)==st(top+1);isvar[top]=0;break;        case 5:st[top]=st(top)!=st(top+1);isvar[top]=0;break;        case 6:st[top]=st(top)<=st(top+1);isvar[top]=0;break;        case 7:st[top]=st(top)>=st(top+1);isvar[top]=0;break;        case 8:st[top]=st(top)<st(top+1);isvar[top]=0;break;        case 9:st[top]=st(top)>st(top+1);isvar[top]=0;break;        case 10:st[top]=st(top)+st(top+1);isvar[top]=0;break;        case 11:st[top]=st(top)-st(top+1);isvar[top]=0;break;        case 12:st[top]=st(top)*st(top+1);isvar[top]=0;break;        case 13:st[top]=st(top)/st(top+1);isvar[top]=0;break;        case 14:st[top]=st(top)%st(top+1);isvar[top]=0;break;    }    if(code[now]==';')        now++;    return st(1);}int sentence(int now)//执行语句{    int run(int now,bool isfun);    int next=word(now);    if(code[now]=='{')        next=run(now,0);    else    if(next-now==2 && code.substr(now,2)=="if")    {        newdep();        next++;        int end=express(next);        if(calc(next))        {            next++;next=sentence(next);            int end=word(next);            if(end-next==4 && code.substr(next,4)=="else")                next=block(end);        }        else        {            next++;            next=block(next);            int end=word(next);            if(end-next==4 && code.substr(next,4)=="else")                next=sentence(end+(code[end]==' '));        }        dep--;    }    else    if(next-now==3 && code.substr(now,3)=="for")    {        newdep();        int judge;        judge=(code[next+1]==';')?next+2:sentence(next+1);int ju=judge;        if(RETU) return next;        int done=express(judge)+1;        int blo=done,deep=1;        while(deep)        {            if(code[blo]=='(') deep++;            if(code[blo]==')') deep--;            blo++;        }        while((code[ju]==';')?1:calc(ju))        {            ju=judge,sentence(blo);            if(RETU) return next;            sentence(done);            if(RETU) return next;        }        next=block(blo);        dep--;    }    else    if(next-now==5 && code.substr(now,5)=="while")    {        newdep();        int judge=next+1,ju=judge;        if(RETU) return next;        int blo=judge,deep=1;        while(deep)        {            if(code[blo]=='(') deep++;            if(code[blo]==')') deep--;            blo++;        }        while(calc(ju))        {            sentence(blo),ju=judge;            if(RETU) return next;        }        next=block(blo);        dep--;    }    else    if(next-now==3 && code.substr(now,3)=="cin")    {        int qian=next,hou=next+1;        while(code[qian]!=';')        {            qian=word(hou+1);            int first=m1[dep][code.substr(hou+1,qian-hou-1)];            var[first+focus(qian,first)]=input[++read];            hou=qian+1;        }        next=hou;    }    else    if(next-now==4 && code.substr(now,4)=="cout")    {        int qian=next,hou=next+1;        while(code[qian]!=';')        {            qian=hou+1;            while((code[qian]!='<' || code[qian+1]!='<' )&&(code[qian]!=';')) qian++;            if(qian-hou==5 && code.substr(hou+1,4)=="endl")                puts("");            else                hou++,printf("%d",calc(hou));            hou=qian+1;        }        next=hou;    }    else    if(next-now==7 && code.substr(now,7)=="putchar")        next++,printf("%c",calc(next)),next+=2;    else    if(next-now==3 && code.substr(now,3)=="int")        next=newvar(next+1);    else    if(next-now==6 && code.substr(now,6)=="return")        next++,retu=calc(next),RETU=1;    else    {        calc(now);        next=now;    }    return next;}int run(int now,bool isfun)//从某个{开始运行 {    newdep();now++;    if(PA)        for(int i=1;i<=pasum[PA];i++)            m1[dep][par[PA][i]]=varsum[dep],var[varsum[dep]]=pa[i],varsum[dep]++;    PA=0;    for(int next=now;code[next]!='}'&& !RETU;now=next)        next=sentence(now);    dep--;if(isfun)RETU=0;now++;    return now;}int main(){    init();    for(int i=0,j;i<len;i=j)//处理全局变量和函数     {        i=word(i)+1;j=word(i);//过滤int        if(code[j]=='(')    j=newfun(i,j);        else    j=newvar(i);    }    run(funstart[m2["main"]],1);    return 0; } 

牛逼的a+ b problem

原创粉丝点击