吐槽:出题人比赛中途换这题,真的太 /tuu 了。
考虑令:
[F(x)=sum_{igeq 0} (i^2+2ki)x^i
]
然后答案显然为:
[ans=sum_{i=n}^{m}(m-i)[x^i]F^n(x)
]
推式子:
[egin{aligned}
F(x)&=sum_{igeq 0} (i^2+2ki)x^i\
&=sum_{igeq 0} i^2x^i+sum_{igeq 0} 2kix^i\
&=frac{x(1+x)}{(1-x)^3}+frac{2kx}{(1-x)^2}\
&=frac{x(1+x)+(1-x)2kx}{(1-x)^3}\
&=frac{x((1+2k)+(1-2k)x)}{(1-x)^3}\
end{aligned}
]
考虑令:
[G(x)=sum_{igeq 0} ix^i=frac{x}{(1-x)^2}
]
即有:
[egin{aligned}
ans&=[x^m]G(x)F^n(x)\
&=[x^m]frac{x}{(1-x)^2}frac{x^n((1+2k)+(1-2k)x)^n}{(1-x)^{3n}}\
&=[x^m]frac{x^{n+1}((1+2k)+(1-2k)x)^n}{(1-x)^{3n+2}}\
&=[x^{m-n-1}]frac{((1+2k)+(1-2k)x)^n}{(1-x)^{3n+2}}\
end{aligned}
]
注意到:
[frac{1}{(1-x)^k}=sum_{igeq 0}{i+k-1choose i}x^i
]
因此有:
[egin{aligned}
ans&=[x^{m-n-1}]frac{((1+2k)+(1-2k)x)^n}{(1-x)^{3n+2}}\
&=[x^{m-n-1}]left(sum_{igeq 0}{i+3n+1choose i}x^i
ight)left(sum_{j=0}^{n}{nchoose j}(1+2k)^{n-j}(1-2k)^{j}x^{j}
ight)\
end{aligned}
]
预处理后就可以 (O(n)) 求了。
const int N=4e6+5;
int n,m,k,l,f1[N],f2[N],fac[N],inv[N];
inline void init_f(int L=N-5) {
fac[0]=1;
lep(i,1,L) fac[i]=mul(fac[i-1],i);
inv[L]=modpow(fac[L],mod-2);
rep(i,L,1) inv[i-1]=mul(inv[i],i);
}
inline int C(int n,int m) {
if(n<m||n<0||m<0) return 0;
return mul(fac[n],mul(inv[m],inv[n-m]));
}
int main() {
init_f();
IN(n,m,k),l=m-n-1,k<<=1;
f1[0]=f2[0]=1;
lep(i,1,n) f1[i]=mul(f1[i-1],add(1,k)),f2[i]=mul(f2[i-1],dec(1,k));
int ans=0;
lep(i,0,l) {
int r1=C(i+3*n+1,i);
int r2=mul(C(n,l-i),mul(n-l+i<0?0:f1[n-l+i],f2[l-i]));
pls(ans,mul(r1,r2));
}
printf("%d
",ans);
return 0;
}