提交时间:2022-05-10 13:32:45
运行 ID: 49613
#include <bits/stdc++.h> using namespace std; #define ll long long ll n,K,k1,k2; const ll d=998244353; ll f[55][40005];//f[i][j]表示函数的前i项,值为j的方案数 ll Qp(ll a,ll b) { ll res=1; while(b>0) { if(b&1) a=a*a%11; b>>=1; } return (res+11)%11; } int main() { cin>>n>>K>>k1>>k2; ll lhn=n*K*10; //防止数组下标出现负数 f[2][Qp(k1,n)*k1+Qp(k1,n-1)*k2+lhn]=1; for(int i=3; i<=n+1; i++) { ll ki=Qp(k1,n-i+1); for(int j=-lhn; j<=lhn; j++) for(int k=-K; k<=K; k++) if(j-ki*k+lhn>=0) { f[i][j+lhn]+=f[i-1][j-ki*k+lhn]; if(f[i][j+lhn]>=d) f[i][j+lhn]-=d; } } cout<<f[n+1][k2+lhn]%d<<endl; return 0; }