Submission #1283928

#TimeUsernameProblemLanguageResultExecution timeMemory
1283928uroskBootfall (IZhO17_bootfall)C++20
100 / 100
441 ms3476 KiB
#include "bits/stdc++.h" using namespace std; const int mod = 1000000123; const int maxn = 505; const int maxS = 2*250005; int n; int dp[maxS]; int a[maxn]; int ok[maxS]; // ok[x] = in how many rounds it is ok to add x signed main(){ cin >> n; int s = 0; for(int i = 1;i<=n;i++) cin >> a[i],s+=a[i]; dp[0] = 1; //Adding everything to knapsack for(int i = 1;i<=n;i++){ for(int j = s;j>=a[i];j--){ dp[j]+=dp[j-a[i]]; if(dp[j]>=mod) dp[j]-=mod; } } if(s%2==1){ cout<<0<<endl; return 0; } if(dp[s/2]==0){ cout<<0<<endl; return 0; } for(int i = 1;i<=n;i++){ //Deleting i from knapsack for(int j = a[i];j<=s;j++){ dp[j]-=dp[j-a[i]]; if(dp[j]<0) dp[j]+=mod; } int cursum = s-a[i]; for(int new_player = 0;new_player<=2*s;new_player++){ int cursum = s-a[i]+new_player; if(cursum%2==0&&cursum/2-new_player>=0&&dp[cursum/2-new_player]>0){ ok[new_player]++; } } //Putting i back in knapsack for(int j = s;j>=a[i];j--){ dp[j]+=dp[j-a[i]]; if(dp[j]>=mod) dp[j]-=mod; } } vector<int> ans; for(int i = 1;i<=2*s;i++){ if(ok[i]==n) ans.push_back(i); } cout<<ans.size()<<endl; for(int x : ans) cout<<x<< " "; cout<<endl; return 0; }
#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...