题意:求一个m次多项式的\(f(x)\)前\((m+1)\)个点值,给定n,p求一个式子的值。
显然当\(f(x) = x\)的时候,就是对\((px + 1 - p)^n\)求期望值,也就是\(np\)。
考虑当\(f(x) = \sum A_kx^k(下降幂)\)答案就是$\sum A_kn^k(下降幂)p^k $
做\(FFT\)求点值\(A_k\)就可以了,复杂度\(O(m log m)\)
Upd:发现暴力思想也可以...
#include<bits/stdc++.h>
using namespace std;
const int mod=998244353ull;
const int maxn = 2000010;
inline int pow(int a,int b) {
int res = 1;
while(b) {
if(b & 1) res = (long long)res * a % mod;
a = (long long)a * a % mod;
b >>= 1;
}
return res;
}
int n,m,k;int p = 1;
int f[maxn];
int ans;
signed main () {
scanf("%d %d %d",&n,&m,&k);
for(int i = 0;i <= m; ++i) {
scanf("%d",&f[i]);
}
for(int i = 0;i <= m; ++i) {
(ans += (long long)f[0] * p % mod) %= mod;
for(int j = 0;j < m - i; ++j) {
(f[j] = f[j + 1] - f[j] + mod) %= mod;
}
p = (long long)p * k % mod * (n - i) % mod * pow(i + 1, mod - 2) % mod;
}
printf("%d\n",ans);
return 0;
}