2017 多小训练第三场 HDU 6061 RXD and functions
来源:互联网 发布:淘宝购物车价格变化 编辑:程序博客网 时间:2024/06/02 23:30
NTT
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mod=998244353;const int maxn=4e5+5;const int g=3;ll ni[maxn],fro[maxn],K[maxn],qp[30],F1[maxn],F2[maxn],ans[maxn];int getlen(int a){a<<=1;int ans=1;while(ans<a) ans<<=1;return ans;}ll qpow(ll a,ll b){a%=mod;ll ans=1;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}void init(){for(int i=0;i<21;i++){int t=1<<i;qp[i]=qpow(g,(mod-1)/t);}fro[0]=ni[0]=1;for(int i=1;i<maxn;i++){fro[i]=fro[i-1]*i%mod;}ni[maxn-1]=qpow(fro[maxn-1],mod-2);for(int i=maxn-1;i>0;i--){ni[i-1]=ni[i]*i%mod;}}void brc(ll *a,int l){for(int i=1,j=l/2;i<l-1;i++){if(i<j) swap(a[i],a[j]);int k=l/2;while(j>=k){j-=k;k>>=1;}if(j<k) j+=k;}}void ntt(ll *y,int l,int on){brc(y,l);int id=0;ll u,t,tmp;for(int h=2;h<=l;h<<=1){id++;for(int j=0;j<l;j+=h){ll w=1;for(int k=j;k<j+h/2;k++){u=y[k];t=w*y[k+h/2]%mod;y[k]=u+t;if(y[k]>=mod) y[k]-=mod;y[tmp=k+h/2]=u-t;if(y[tmp]<0) y[tmp]+=mod;w=w*qp[id]%mod;}}}if(on<0){for(int i=1;i<l/2;i++)swap(y[i],y[l-i]);ll ni=qpow(l,mod-2);for(int i=0;i<l;i++){y[i]=(y[i]*ni)%mod;}}}inline void debug(){cout<<"yes"<<endl;}int main(int argc, char const *argv[]){init();int n,m;while(~scanf("%d",&n)){for(int i=0;i<=n;i++){scanf("%lld",K+i);}scanf("%d",&m);ll a=0;int x;for(int i=0;i<m;i++){scanf("%d",&x);a-=x;if(a<0) a=(a+mod)%mod;}int len=getlen(n+1);if(a==0){for(int i=0;i<=n;i++){printf("%lld",K[i]);}printf("\n");continue;}for(int i=0,aa=1;i<len;i++){if(i<=n){F1[i]=aa*ni[i]%mod;F2[i]=fro[n-i]*K[n-i]%mod;}else{F1[i]=F2[i]=0;}aa=1LL*aa*a%mod;}ntt(F1,len,1);ntt(F2,len,1);for(int i=0;i<len;i++){F1[i]=F1[i]*F2[i]%mod;}ntt(F1,len,-1);for(int i=0;i<=n;i++){ans[i]=F1[i];ans[i]=(ans[i]%mod+mod)*ni[n-i]%mod;}for(int i=0;i<=n;i++){printf("%lld ",ans[n-i]);}printf("\n");}return 0;}
阅读全文
0 1
- 2017 多小训练第三场 HDU 6061 RXD and functions
- HDU 6061 RXD and functions
- HDU 6061 RXD and functions(NTT)
- [HDU] 6061 RXD and functions [NTT]
- 2017 多校训练第三场 HDU 6063 RXD and math
- 2017 多校训练第三场 HDU 6060 RXD and dividing
- hdu 6060 RXD and dividing 2017多校第三场第五题(思维+dfs)
- 2017多校联合第三场 1005题 hdu 6060 RXD and dividing (超详细!!!)构造
- HDU 6060-RXD and dividing(多校训练第三场->DFS)
- HDU 6063 RXD and math+(快速幂)+多校联赛第三场
- hdu 6061 RXD and functions [快速数论变换]
- HDU 6061 RXD and functions(NTT+卷积)
- HDU6063 2017杭电多校联赛第三场-RXD and math
- 2017年多校赛第三场 1005 RXD and dividing(DFS)
- 2017 多校训练第三场 HDU 6066 RXD's date
- HDU6061 RXD and functions
- 2017杭电多校联赛第三场-RXD and math (hdu6063) 找规律快速幂
- 2017杭电多校联赛第三场-RXD and dividing (hdu6060)最小生成树
- 合并石子(动态规划经典题)
- [PAT乙级]1017. A除以B (20)
- Vue指令总结
- 如何判断字符串A是否以字符串B开头或结尾
- Excel VBA 循环读取一个目录下面多个文件的内容,放到另外一个文件中
- 2017 多小训练第三场 HDU 6061 RXD and functions
- 图形处理中的傅里叶变换和低筒滤波详解
- WebGL之旅(十九) 雾化
- 浅谈缓式评估技术的好处及方法
- shell 当前工作目录的绝对路径
- 平衡二叉树
- python:通过python脚本快速执行 bash 命令
- PHP的ftp操作
- 距离之和最小 V2