hdu 6061 NTT
来源:互联网 发布:淘宝直播卖东西可信吗 编辑:程序博客网 时间:2024/05/21 08:52
#pragma comment(linker, "/STACK:102400000,102400000")#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2*1e5+5;const ll mod=998244353;const ll P=mod;//费马素数const ll G=3;//原根ll inv[maxn],facinv[maxn],fac[maxn],c[maxn];ll a[2*maxn],b[2*maxn],wn[26];ll mul(ll x,ll y){ return (x%P)*(y%P)%P;}ll quick_mod(ll a,ll b){ ll res=1; while(b) { if(b&1) res=res*a%P; a=a*a%mod; b>>=1; } return res;}void GetWn(){ for(int i=0;i<26;i++) { int t =1<<i; wn[i]=quick_mod(G,(P-1)/t); }}void Rader(ll a[],int len){ int j=len>>1; for(int i=1;i<len-1;i++) { if(i<j) swap(a[i],a[j]); int k=len>>1; while(j>=k) { j-=k; k>>=1; } if(j<k) j+=k; }}void NTT(ll a[],int len,int on){ Rader(a,len); int id=0; for(int h=2;h<=len;h<<=1) { id++; for(int j=0;j<len;j+=h) { ll w=1; for(int k=j;k<j+h/2;k++) { ll u=a[k]; ll t=mul(w,a[k+h/2]); a[k]=(u+t)%P; a[k+h/2]=((u-t)%P+P)%P; w=mul(w,wn[id]); } } } if(on==-1) { for(int i=1;i<len/2;i++) swap(a[i],a[len-i]); ll Inv=quick_mod(len,P-2); for(int i=0;i<len;i++) a[i]=mul(a[i],Inv); }}void Conv(ll a[],ll b[],int n){ NTT(a,n,1); NTT(b,n,1); for(int i=0;i<n;i++) a[i]=mul(a[i],b[i]); NTT(a,n,-1);}void init(){ fac[0]=facinv[0]=fac[1]=facinv[1]=inv[1]=inv[0]=1; for(int i=2;i<maxn;i++) { inv[i]=(mod-mod/i)*inv[mod%i]%mod; fac[i]=i*fac[i-1]%mod; facinv[i]=inv[i]*facinv[i-1]%mod; }}int main(){ /////////////////////////////////////////////////// GetWn(); init(); ////////////////////////////////////////////////// int n,m,i; while(scanf("%d",&n)!=EOF) { for(i=0;i<=n;i++) scanf("%lld",c+i); scanf("%d",&m); ll sum=0,tp; for(i=1;i<=m;i++) { scanf("%lld",&tp); sum=(sum-tp+mod)%mod; } ////////////////////////////////////////////////// int len=1; while(len<2*(n+1)) len<<=1; ////////////////////////////////////////////////// ll res=1; for(i=0;i<=n;i++) { a[i]=res*facinv[i]%mod; res=res*sum%mod; b[i]=c[n-i]*fac[n-i]%mod; } ////////////////////////////////////////////////// for(int i=n+1;i<len;i++) a[i]=b[i]=0; Conv(a,b,len); //////////////////////////////////////////////////存在a数组中 for(int i=0;i<=n;i++) printf("%lld ",a[n-i]*facinv[i]%mod); printf("\n"); } return 0;}
阅读全文
0 0
- hdu 6061 NTT
- HDU 6061 RXD and functions(NTT)
- [HDU] 6061 RXD and functions [NTT]
- HDU 5829 (NTT)
- hdu 6036 NTT
- hdu 4656(NTT
- HDU 6061 RXD and functions(NTT+卷积)
- HDU 5322 NTT与分治
- HDU 5552 (CDQ分治 NTT)
- HDU 5896 (CDQ分治 NTT)
- Hdu-4609 3-idiots(NTT)
- hdu 5322 Hope 分治 NTT
- HDU 5552 CDQ分治+NTT
- HDU 5896 CDQ分治+NTT
- NTT
- NTT
- 2017多校训练赛第三场 HDU 6061(NTT模板)
- HDU 5322 Hope (CDQ分治+NTT)
- Shell实现俄罗斯方块小游戏
- 玲珑杯1114(组合数)
- 杭电acm 3132GCC(简单数论)
- 三条命令解决Git 如何删除远程服务器文件同时保留本地文件
- 百度地图简要功能实现
- hdu 6061 NTT
- 网易2017年校招笔试题--最大奇约数
- TensorFlow学习笔记
- 微信公众平台开发——如何保证access_token长期有效?
- 《代码整洁之道》第七章——错误处理
- hdu 6070 Dirt Ratio 二分,线段树
- CSS 派生选择器 contextual selectors
- Linux curl介绍
- Struts