[Zjoi2014]力(FFT,卷积)

[Zjoi2014]力(FFT,卷积)

题意:给定\(n\)个点电荷,排在单位数轴上,求每个点的场强

考虑每个\(i\)对于每个\(j\)的贡献,分析式子

\(E=\cfrac{q_i}{(j-i)^2}\)

\(f(x)=\sum q_ix^i\)

\(g(x)=\sum a_ix^i,a_i=i<0?-\frac{1}{i^2}:\frac{1}{i^2}\)

\(g(x)\)每一项\(x\)的指数其实是\(j-i\)的值

\(f(x)\cdot g(x)\)即可,注意负数系数的话偏移一下

是一个简单的作差卷积,适合作为\(FFT\)入门题

#include
using namespace std;

#define double long double

#define reg register
typedef long long ll;
#define rep(i,a,b) for(reg int i=a,i##end=b;i<=i##end;++i)
#define drep(i,a,b) for(reg int i=a,i##end=b;i>=i##end;--i)

template  inline void cmin(T &a,T b){ ((a>b)&&(a=b)); } 
template  inline void cmax(T &a,T b){ ((ai) swap(a[i],a[rev[i]]);
    for(reg int i=1;i>1]>>1)|((i&1)<

你可能感兴趣的:([Zjoi2014]力(FFT,卷积))