Submission #1233012

#TimeUsernameProblemLanguageResultExecution timeMemory
1233012ereringBootfall (IZhO17_bootfall)C++20
28 / 100
215 ms327680 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define endl '\n' #define int long long const int N=500+5,inf=2e9,MOD=1e9+7; int dp[N][N*N],a[N]; bool can[N][N*N]; //can we achieve sum j if we remove i signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; dp[0][0]=1; int tot=0; for(int i=1;i<=n;i++){ tot+=a[i]; for(int j=N*N-1;j>=0;j--){ dp[i][j]=dp[i-1][j]; if(j>=a[i])dp[i][j]+=dp[i-1][j-a[i]]; dp[i][j]%=MOD; } } if(tot%2==1 || dp[n][tot/2]==0){ cout<<0; return 0; } for(int i=1;i<=n;i++){ for(int j=0;j<N*N;j++){ if(j>=a[i])dp[n][j]-=dp[n][j-a[i]]; dp[n][j]+=MOD; dp[n][j]%=MOD; if(dp[n][j]>0)can[i][j]=1; } for(int j=N*N-1;j>=0;j--){ if(j>=a[i])dp[n][j]+=dp[n][j-a[i]]; dp[n][j]%=MOD; } } vector<int> ans; for(int i=1;i<N*N;i++){ bool flag=1; for(int j=1;j<=n;j++){ int sum=tot-a[j]; if(!((sum+i)%2==0 && can[j][(sum+i)/2])){ flag=0; } } if(flag)ans.pb(i); } cout<<ans.size()<<endl; for(auto i:ans)cout<<i<<' '; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...