给出n个数qi,给出Fj的定义如下:
令Ei=Fi/qi,求Ei.
找到一个很详细的题解:http://blog.csdn.net/qq_33929112/article/details/54590319花了两个小时来理解和写,1个小时查卡精度,又花了1个小时改模板卡洛谷的时限以后都从0开始观察这个式子E=C-D就是两个卷积啊....其中一个函数是1/i^2规定1/0^2=0后,i=j也可以包括进来了 然后前面那个是卷积标准形式,后面那个和上一题的技巧是一样的更改求和指标然后把q反转再反转D
[update 2017-03-30]
新推♂倒了一下
写出E的表达式,定义$\frac{1}{0^2}=0$前半部分裸卷积,后半部分反转一个向量,又是裸卷积...
注意:
傻逼题卡精度1/i/i才行
#include#include #include #include #include using namespace std;typedef long long ll;const int N=(1<<18)+5, INF=1e9;const double PI=acos(-1);inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){ if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}struct meow{ double x, y; meow(double a=0, double b=0):x(a), y(b){}};meow operator +(meow a, meow b) { return meow(a.x+b.x, a.y+b.y);}meow operator -(meow a, meow b) { return meow(a.x-b.x, a.y-b.y);}meow operator *(meow a, meow b) { return meow(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x);}meow conj(meow a) { return meow(a.x, -a.y);}typedef meow cd;struct FFT{ int n, rev[N]; void ini(int lim) { n=1; int k=0; while(n >1; cd wn = meow(cos(2*PI/l), flag*sin(2*PI/l)); for(cd *p=a; p!=a+n; p+=l) { cd w(1, 0); for(int k=0; k