Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38774 LYLAKIOIAKIOI 【BJ】T3 C++ 通过 100 2399 MS 27516 KB 1879 2025-10-27 15:37:36

Tests(20/20):


#include<bits/stdc++.h> #define pii pair<int,int> #define fi first #define se second #define mk make_pair using namespace std; const int N=2e5+10,B=1000,mod=998244353; const int LM=(2*N/B)+3,V=2*B; const int XOR=21119002; void Add(int &a,int b){a+=b;if(a>=mod) a-=mod;} int f[B+10][V+10],g[2][N<<1]; int n,w; int calc(int u,int v){ int res=0; for(int i=0;i<=LM;i++){ int need=n-u-v*i; if(need<-n) break; Add(res,f[i][N+need]); } return res; } vector<pair<pii,int>> ask; int main(){ //freopen("dazzling.in","r",stdin); //freopen("dazzling.out","w",stdout); cin>>n>>w; for(int i=1;i<=min(B,n);i++) f[i][i]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=B;j++){ if(i+(j-1)<=n) Add(f[j-1][(i+j-1)%V],1ll*w*f[j][i%V]%mod); if(i+(j+1)<=n) Add(f[j+1][(i+j+1)%V],f[j][i%V]); //if(i<=5) cout<<j<<' '<<i<<' '<<f[j][i]<<endl; }ask.push_back(mk(mk(i,B+1),f[B+1][i%V])); if(i!=n) for(int j=0;j<=B+1;j++) f[j][i%V]=0; } for(int i=B+1;i<=n;i++) ask.push_back(mk(mk(i,i),1)); //memset(f,0,sizeof(f)); int ans=0; for(int i=1;i<=B;i++) Add(ans,f[i][n%V]); g[0][N]=1; for(int i=1;i<=LM;i++){ for(auto ed:ask){ int need=n-ed.fi.fi-(i-1)*ed.fi.se; //cout<<i-1<<' '<<ed.fi.fi<<' '<<ed.fi.se<<' '<<ed.se<<' '<<need<<endl; if(need>=-n) Add(ans,1ll*ed.se*g[0][need+N]%mod); //cout<<ans<<endl; } memset(g[1],0,sizeof(g[1])); for(int j=-n;j<=n;j++){ if(j+i<=n) Add(g[1][j+i+N],g[0][j+N]); if(j-i>=-n) Add(g[1][j-i+N],1ll*g[0][j+N]*w%mod); } memcpy(g[0],g[1],sizeof(g[0])); } //for(auto ed:ask){Add(ans,1ll*ed.se*calc(ed.fi.fi,ed.fi.se)%mod);} cout<<ans<<endl; return 0; }


测评信息: