【51nod 1028】 大数乘法 V2 【FFT/NTT】
FFT
AC代码。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<complex>
#define in_ inline
#define re_ return
#define op_ operator
#define tt_ template<typename x>
#define st_ static
#define inc(l, i, r) for(i=l; i<r; ++i)
typedef long long ll;
typedef double db;
const db eps=0.000001;
const ll mxn=300000;
ll c[mxn];
struct com
{
db r, i;
com(){r=i=0;}
com(db a, db b){r=a, i=b;}
tt_ in_ com op_*(x a)
{re_ com(r*a, i*a);}
in_ com op_*(com a)
{re_ com(r*a.r-i*a.i, r*a.i+i*a.r);}
tt_ in_ com op_+(x a)
{re_ com(r+a, i);}
in_ com op_+(com a)
{re_ com(r+a.r, i+a.i);}
tt_ in_ com& op_*=(x a)
{re_ *this=*this*a;}
tt_ in_ com& op_+=(x a)
{re_ *this=*this+a;}
tt_ in_ com& op_=(x a)
{re_ *this=com(a, 0);}
} a[mxn], b[mxn];
struct io
{
tt_ in_ io& op_& (x* a)
{
st_ ll c;
for(;(c=getchar())<48||57<c;)
if(c==EOF) re_ *this;
for(;c>47&&58>c; c=getchar())
*a++=c-48;
*a=-1;
re_ *this;
}
in_ io& op_| (char* s)
{
for(;*s; s++) putchar(*s);
puts("");
re_ *this;
}
in_ io& op_