#include<cstdio>#include<iostream>#include<algorithm>usingnamespace std;
typedeflonglong ll;
constint maxm = 2e4 + 5;
constint sz = 2e5 + 5;
constint mod = 998244353;
constint g = 3;
int n, m, x;
int a[maxm], rev[sz];
ll F[sz], G[sz];
ll fac[sz], invf[sz], wp[sz];
inlineintread(){
int res = 0, flag = 1;
char ch = getchar();
while ((ch < '0') || (ch > '9'))
{
if (ch == '-') flag = -1;
ch = getchar();
}
while ((ch >= '0') && (ch <= '9')) res = res * 10 + ch - '0', ch = getchar();
return res * flag;
}
voidcalc_rev(int k){ for (int i = 0; i < k; i++) rev[i] = (rev[i >> 1] >> 1 | (i & 1 ? k >> 1 : 0)); }
ll qpow(ll base, ll power, ll mod){
ll res = 1;
while (power)
{
if (power & 1) res = res * base % mod;
base = base * base % mod, power >>= 1;
}
return res;
}
ll qpow(int x){ return (x % 2 == 0 ? 1 : mod - 1); }
voidNTT(ll* A, int n){
calc_rev(n);
for (int i = 0; i < n; i++)
if (rev[i] > i) swap(A[i], A[rev[i]]);
for (int len = 2, m = 1; len <= n; m = len, len <<= 1)
{
ll wn = qpow(g, (mod - 1) / len, mod) % mod;
wp[0] = 1;
for (int i = 1; i <= len; i++) wp[i] = wp[i - 1] * wn % mod;
for (int l = 0, r = len - 1; r <= n; l += len, r += len)
{
int w = 0;
for (int p = l; p < l + m; p++, w++)
{
ll x = A[p], y = wp[w] * A[p + m] % mod;
A[p] = (x + y) % mod, A[p + m] = (x - y + mod) % mod;
}
}
}
}
voidINTT(ll *A, int n){
NTT(A, n), reverse(A + 1, A + n);
int inv = qpow(n, mod - 2, mod);
for (int i = 0; i < n; i++) A[i] = A[i] * inv % mod;
}
voidtimes(ll *F, ll *G, int lf, int lg, int lim){
int len = lf + lg - 1, k = 1;
while (k < len) k <<= 1;
NTT(F, k), NTT(G, k);
for (int i = 0; i < k; i++) F[i] = F[i] * G[i] % mod;
INTT(F, k), INTT(G, k);
for (int i = lim; i < k; i++) F[i] = 0;
}
voidinit(int lim){
fac[0] = invf[0] = fac[1] = invf[1] = 1;
for (int i = 2; i <= lim; i++) fac[i] = fac[i - 1] * i % mod, invf[i] = (mod - mod / i) * invf[mod % i] % mod;
for (int i = 2; i <= lim; i++) invf[i] = invf[i - 1] * invf[i] % mod;
}
intmain(){
scanf("%d%d%d", &n, &m, &x);
init(m);
for (int i = 0; i <= m; i++) F[i] = invf[i] * qpow(i) % mod;
for (int i = 0; i <= m; i++) G[i] = invf[i] * read() % mod;
times(F, G, m + 1, m + 1, m + 1);
for (int i = 0; i <= m; i++) F[i] = F[i] * fac[i] % mod;
int cur = 1, ans = 0;
for (int i = 0; i <= m; i++) ans = (ans + 1ll * cur * F[i] % mod * invf[i] % mod) % mod, cur = 1ll * cur * x % mod * (n - i) % mod;
printf("%d\n", ans);
return0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)