题意

\(x_k=bc^{2k}+d\)

\(\displaystyle F(x)=\sum_{i=0}^{n-1}a_ix^i\)

给定 \(\{a\},b,c,d,n\) ,求 \(F(x_0),F(x_1),\cdots,F(x_{n-1})\)

思路

设 \(ans_k=F(x_k)\)

\[ans_k=\sum_{i=0}^{n-1}a_i(b\cdot c^{2k}+d)^i
\]

二项展开得

\[ans_k=\sum_{i=0}^{n-1}\sum_{j=0}^{i}a_i{i\choose j}(b\cdot c^{2k})^jd^{i-j}
\]

设 \(\displaystyle f(i)=a_id^ii!,g(j)={b^j\over {d^jj!}}\)

\[ans_k=\sum_{i=0}^{n-1}\sum_{j=0}^{i}f(i)g(j)c^{2kj}{1\over(i-j)!}\\
ans_k=\sum_{j=0}^{n-1}g(j)c^{2kj}\sum_{i=j}^{n-1}f(i){1\over(i-j)!}
\]

不难发现,后面那个 $ \sum$ 与 \(k\) 无关,可以预处理出来。

我们设 \(\displaystyle h(j)=\sum_{i=j}^{n-1}f(i){1\over(i-j)!}\)

这个可以直接用多项式乘出来。

有能力 $ O(1)$ 求解 $ h(j)$ 后,得到

\[ans_k=\sum_{j=0}^{n-1}g(j)h(j)c^{2jk}\\
ans_k=\sum_{j=0}^{n-1}g(j)h(j)c^{j^2+k^2-(k-j)^2}\\
ans_k=\sum_{j=0}^{n-1}g(j)h(j){c^{j^2}c^{k^2}\over {c^{{(k-j)}^2}}}\\
ans_k=c^{k^2}\sum_{j=0}^{n-1}g(j)h(j)c^{j^2}{1\over {c^{{(k-j)}^2}}}\\
\]

再进行一次多项式乘法就可以了。

代码

#include<bits/stdc++.h>
#define FOR(i,x,y) for(int i=(x),i##END=(y);i<=i##END;++i)
#define DOR(i,x,y) for(int i=(x),i##END=(y);i>=i##END;--i)
typedef long long ll;
using namespace std;
const double PI=acos(-1.0);
const int N=1<<18|5;
const int P=1e6+3;
namespace _Maths
{
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b){x=1,y=0;return;}
exgcd(b,a%b,y,x);y-=a/b*x;
}
ll Pow(ll a,ll p,ll P)
{
ll res=1;
for(;p>0;(a*=a)%=P,p>>=1)if(p&1)(res*=a)%=P;
return res;
}
ll inv(ll a,ll P){ll x,y;exgcd(a,P,x,y);return (x%P+P)%P;}
};
using namespace _Maths;
struct Complex
{
double x,y;
Complex operator +(const Complex &_)const{return (Complex){x+_.x,y+_.y};}
Complex operator -(const Complex &_)const{return (Complex){x-_.x,y-_.y};}
Complex operator *(const Complex &_)const{return (Complex){x*_.x-y*_.y,x*_.y+y*_.x};}
Complex operator /(const int &_)const{return (Complex){x/_,y/_};}
};
namespace _Polynomial
{
const int K=(1<<15)-1,L=15;
Complex A[N<<1],B[N<<1],C[N<<1],D[N<<1];
Complex w[N<<1];int r[N<<1];
void DFT(Complex *a,int op,int n)
{
FOR(i,0,n-1)if(i<r[i])swap(a[i],a[r[i]]);
for(int i=2;i<=n;i<<=1)
for(int j=0;j<n;j+=i)
for(int k=0;k<i/2;k++)
{
Complex u=a[j+k],t=w[(op==1?n/i*k:n-n/i*k)&(n-1)]*a[j+k+i/2];
a[j+k]=u+t,a[j+k+i/2]=u-t;
}
if(op==-1)FOR(i,0,n-1)a[i]=a[i]/n;
}
void multiply(const int *a,const int *b,int *c,int n1,int n2)
{
int n=1;
while(n<n1+n2-1)n<<=1;
FOR(i,0,n1-1)A[i].x=a[i]&K,A[i].y=a[i]>>L;
FOR(i,0,n2-1)B[i].x=b[i]&K,B[i].y=b[i]>>L;
FOR(i,n1,n-1)A[i].x=A[i].y=0;
FOR(i,n2,n-1)B[i].x=B[i].y=0;
FOR(i,0,n-1)r[i]=(r[i>>1]>>1)|((i&1)*(n>>1));
FOR(i,0,n-1)w[i]=(Complex){cos(2*PI*i/n),sin(2*PI*i/n)}; DFT(A,1,n),DFT(B,1,n);
FOR(i,0,n-1)
{
int j=(n-i)&(n-1);
C[i]=(Complex){0.5*(A[i].x+A[j].x),0.5*(A[i].y-A[j].y)}*B[i];
D[i]=(Complex){0.5*(A[i].y+A[j].y),0.5*(A[j].x-A[i].x)}*B[i];
}
DFT(C,-1,n),DFT(D,-1,n);
FOR(i,0,n-1)
{
ll s=C[i].x+0.5,t=C[i].y+0.5,u=D[i].x+0.5,v=D[i].y+0.5;
c[i]=(s%P+((t+u)%P<<L)+(v%P<<L<<L))%P;
}
}
};
int fac[N],ifac[N],h[N];
int A[N],B[N],C[N<<1];
int a[N],b,c,d;
int n; ll f(int i){return (ll)a[i]*Pow(d,i,P)%P*fac[i]%P;}
ll g(int i){return (ll)Pow(b,i,P)*inv(Pow(d,i,P)%P*fac[i]%P,P)%P;} int main()
{
fac[0]=fac[1]=1;FOR(i,2,N-1)fac[i]=(ll)fac[i-1]*i%P;
ifac[0]=ifac[1]=1;FOR(i,2,N-1)ifac[i]=(ll)(P-P/i)*ifac[P%i]%P;
FOR(i,2,N-1)ifac[i]=(ll)ifac[i-1]*ifac[i]%P;
scanf("%d%d%d%d",&n,&b,&c,&d);
FOR(i,0,n-1)scanf("%d",&a[i]); FOR(i,0,n-1)A[i]=f(i);
FOR(i,1-n,0)B[(n-1)+i]=ifac[-i];
_Polynomial::multiply(A,B,C,n,n);
FOR(i,0,n-1)h[i]=C[(n-1)+i]; FOR(i,0,n-1)A[i]=g(i)*h[i]%P*Pow(c,(ll)i*i,P)%P;
FOR(i,1-n,n-1)B[(n-1)+i]=inv(Pow(c,(ll)i*i,P),P);
_Polynomial::multiply(A,B,C,n,2*n-1);
FOR(i,0,n-1)printf("%lld\n",Pow(c,(ll)i*i,P)*C[(n-1)+i]%P);
return 0;
}

HDU 4656 Evaluation(MTT)的更多相关文章

  1. HDU 5934 Bomb(炸弹)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  2. HDU 5734 Acperience(返虚入浑)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  3. HDU 5724 Chess(国际象棋)

    HDU 5724 Chess(国际象棋) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  4. HDU 5826 physics(物理)

     physics(物理) Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   D ...

  5. HDU 5835 Danganronpa(弹丸论破)

     Danganronpa(弹丸论破) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  6. hdu 4656 Evaluation [任意模数fft trick]

    hdu 4656 Evaluation 题意:给出\(n,b,c,d,f(x) = \sum_{i=1}^{n-1} a_ix^i\),求\(f(b\cdot c^{2k}+d):0\le k < ...

  7. HDU 3085 Nightmare Ⅱ(噩梦 Ⅱ)

    HDU 3085 Nightmare Ⅱ(噩梦 Ⅱ) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  8. HDU 5976 Detachment(拆分)

    HDU 5976 Detachment(拆分) 00 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   Problem D ...

  9. HDU 4816 Bathysphere(数学)(2013 Asia Regional Changchun)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 Problem Description The Bathysphere is a spheric ...

随机推荐

  1. mysql每天弹出窗口检测更新关闭方式...

    右击计算机-->管理-->系统工具-->任务计划程序-->MySQL<如下图>,选中右键删除或者禁用即可... 更新分界线--------------------- ...

  2. Set接口——HashSet集合

    不重复,无索引,不能重复元素,没有索引: HashSet集合: 此时实现Set接口,有哈希表(HashMap的一个实例)支持,哈希表意味着查询速度很快, 是无序的,即元素的存取的顺序可能不一致: 且此 ...

  3. 算法提高 P0101

    一个水分子的质量是3.0*10-23克,一夸脱水的质量是950克.写一个程序输入水的夸脱数n(0 <= n <= 1e10),然后输出水分子的总数.输入 109.43输出 3.465283 ...

  4. Install kubernetes without yum

    下载最新版本: https://github.com/kubernetes/kubernetes/releases 下载kubernetes.tar.gz即可 解压缩后到cluster目录下 执行ge ...

  5. Hybrid App中原生页面 VS H5页面(分享)

    本文部分转自  http://www.jianshu.com/p/00ff5664e000 现有3类主流APP,分别为:Web App.Hybrid App(混合模式移动应用,Hybrid有“混合的” ...

  6. kali linux 压缩文件解压缩命令(包含7z)

    tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压1 ...

  7. 每日linux命令学习-sed

    Linux的文本处理实用工具主要由sed和awk命令,二者虽然略有差异,但都使用正则表达式,默认使用标准I/O,并且使用管道命令可以将前一个命令的输出作为下一个命令的输入.笔者将在本节学习sed命令. ...

  8. iOS项目之解析HTML数据

    最近因为需求,一直在做HTML数据的解析,从网页中去获取需要的数据,然后展示到自己的app中. 在网上找了很多资料,大多都是TFHpple这个第三方框架,能够根据标签节点获取对应的数据,但是现在我需要 ...

  9. camera按键采集图像及waitKey的用法(转)

    源: camera按键采集图像及waitKey的用法

  10. django加载静态文件

    在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件. js 执行文件以及一些图片等,因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 static 标签来 ...