Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
41350 LYLAKIOI 【BJ】T2 C++ 通过 100 100 MS 360 KB 1241 2026-04-18 15:19:16

Tests(20/20):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef long double db; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int p=998244353; int n,w,a[5005],dp[5005],ans[5005],pw[5005]; inline int add(int a,int b){if((a+=b)>=p)a-=p;return a;} void slv(){ n=read(),w=read(); up(i,1,n)a[i]=read(); pw[0]=1;up(i,1,n)pw[i]=pw[i-1]*2%p; sort(a+1,a+n+1);dp[0]=1; int res=0; down(i,n,1){ int p=i+1,q=i; int s=0; up(j,a[i],w){ while(p<=n&&a[p]+a[i]<=j)p++; while(q<=n&&a[q]<=j)q++; ans[j]=(ans[j]+(s=add(s,dp[j-a[i]]))*1llu*pw[q-p])%(::p); } down(j,w,a[i])dp[j]=add(dp[j],dp[j-a[i]]); } up(i,1,w)printf("%d ",ans[i]); } int main(){ // freopen("b.in","r",stdin),freopen("b.out","w",stdout); slv(); return 0; }


测评信息: