【洛谷】P4705 玩遊戲-生成函式
阿新 • • 發佈:2019-01-03
傳送門:luoguP4705
題解
次價值的期望:
二項式定理展開一下:
所以需要構造的生成函式 的第 項係數分別為
單獨考慮
對
的貢獻:
,生成函式為
。
所以
在分母不好看,積分轉成 ,得到
還是不好看。。。再把求導轉到整個函式外面:
則 。
同理,然後套多項式模板即可。
程式碼
#include<bits/stdc++.h>
#define mem(f) memset(f,0,sizeof(f))
using namespace std;
typedef long long ll;
const int N=1e5+10,M=2e6+10,mod=998244353,gen=3;
int n,m,bs,ivg,a[M],b[M],f[M],g[M];
int rv[M],s[20][M],frac[N],nv[N];
char cp,OS[100];
inline void rd(int &x)
{
cp=getchar();x=0;
for(;!isdigit(cp);cp=getchar());
for(;isdigit(cp);cp=getchar()) x=(x<<3)+(x<<1)+(cp^48);
}
inline void ot(int x)
{
int re=0;OS[0]='\n';
for(;(!re)||x;x/=10) OS[++re]='0'+x%10;
for(;~re;--re) putchar(OS[re]);
}
inline int ad(int x,int y){x+=y;return x>=mod?x-mod:x;}
inline int dc(int x,int y){x-=y;return x<0?x+mod:x;}
inline int fp(int x,int y)
{
int re=1;
for(;y;y>>=1,x=(ll)x*x%mod)
if(y&1) re=(ll)re*x%mod;
return re;
}
inline void ntt(int *e,int pr,int n)
{
int i,j,k,ix,iy,ori,pd,g=pr?gen:ivg;
for(i=1;i<n;++i) if(i<rv[i]) swap(e[i],e[rv[i]]);
for(i=1;i<n;i<<=1){
ori=fp(g,(mod-1)/(i<<1));
for(j=