神级代码推荐
来源:互联网 发布:淘宝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
阅读全文
1 0
- 神级代码推荐
- 推荐一个好代码
- javascript经典代码推荐
- 代码搜索引擎推荐
- 代码搜索引擎推荐
- 推荐代码调整工具
- python代码风格推荐
- 6大代码搜索引擎推荐
- 6大代码搜索引擎推荐
- 推荐cpplint检查代码规范
- 代码格式化美化工具推荐
- 6大代码搜索引擎推荐
- 代码分析工具推荐Understand
- 6大代码搜索引擎推荐
- 6大代码搜索引擎推荐
- CSS代码编写顺序推荐
- 代码分析工具推荐Understand
- 我推荐的代码规范
- Python中unittest 用不同的参数组合,测试同样的行为;使test case根据参数多次运行
- [C#.Net]判断文件是否被占用的两种方法
- 邮件服务器IP被微软@live列入黑名单,删除掉黑名单步骤
- Vue 饿了么 创建骨架
- PHP5 GD,验证码笔记 COOKIE,SESSION
- 神级代码推荐
- eval()的替代写法
- Python模块——time
- mysql(一) 基础概念
- 5.5二叉树的遍历
- mqtt连接
- 爬虫实践(一)--手写爬虫
- HDU 1029 Ignatius and the Princess IV (DP,水题)
- vmware linux虚拟机与本地物理机共享文件夹