提交时间:2022-04-14 10:00:20

运行 ID: 48617

#include<bits/stdc++.h> using namespace std; template<typename T>inline void in(T &a) { T ans=0,f=0; char c=getchar(); for(; c<'0' || c>'9'; f^=!(c^'-'),c=getchar()); for(; c<='9' && c>='0'; c=getchar())ans=(ans<<3)+(ans<<1)+(c^48); a=(f?~ans+1:ans); } template<typename T,typename... Args>inline void in(T &a,Args&...args) { in(a),in(args...); } int qpow(int a,int b,int ans=1) { while(b>=1) { if(b&1)ans=((ans*a)%11+11)%11; a=((a*a)%11+11)%11,b>>=1; } return ans; } int dp[55][25005],a[55],n,k,k1,k2; int main() { in(n,k,k1,k2); for(int i=1; i<=n+1; i++)a[i]=qpow(k1,n-i+1); dp[1][k1*a[1]+12500]=dp[2][k1*a[1]+k2*a[2]+12500]=1; for(int i=3; i<=n+1; i++)for(int x=-12500; x<=12500; x++)for(int y=-k; y<=k; y++)dp[i][x+12500]=(dp[i][x+12500]+dp[i-1][x-a[i]*y+12500])%998244353; printf("%d\n",dp[n+1][k2+12500]); return 0; }