Submission #38465

#TimeUsernameProblemLanguageResultExecution timeMemory
38465MrPlanyBootfall (IZhO17_bootfall)C++14
100 / 100
639 ms5804 KiB
//Bismillahi-rahmani-rahim #include <bits/stdc++.h> using namespace std; const int N = 250000; int n; int a[505], cnt[N+505]; int dp[N+505], d[N+505]; vector<int> ans; int main() { //Lebap; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int sum = 0; for(int i=1;i<=n;i++) sum += a[i]; dp[0] = 1; for(int i=1;i<=n;i++) { for(int j=N;j>=0;j--) dp[j+a[i]] += dp[j]; } if(sum%2!=0 || dp[sum/2]==0) return cout << "0", 0; for(int i=1;i<=n;i++) { memset(d,0,sizeof(d)); for(int j=0;j<=N;j++) { d[j] += dp[j]; d[j+a[i]] -= d[j]; } for(int j=0;j<=N;j++) { if((sum-a[i]+j)%2==0 && sum-a[i]-j>=0 && d[(sum-a[i]-j)/2]!=0) cnt[j]++; } } for(int i=1;i<=N;i++) if(cnt[i]==n) ans.push_back(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...