Submission #930698

#TimeUsernameProblemLanguageResultExecution timeMemory
930698allin27xBootfall (IZhO17_bootfall)C++17
28 / 100
1046 ms8280 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 502; set<int> good; set<int> ng; set<int> nng; int ar[MAXN]; int n; bitset<MAXN * MAXN> kp; void knap(int ind){ kp.reset(); kp.set(0); int s =0; for (int i=0; i<n; i++) if (i!= ind) s+=ar[i]; for (int i=0; i<n; i++){ if (i==ind) continue; kp |= kp<<ar[i]; } ng.clear(); for (int i=1; i<n*MAXN; i++){ if (!kp[i]) continue; // i = (s-i) + r if (2*i-s <= 0) continue; ng.insert(2*i-s); } nng.clear(); for (int x: good) if (ng.count(x)) nng.insert(x); good = nng; } int main(){ cin>>n; for (int i=0; i<n; i++) cin>>ar[i]; for (int i=1; i<n*MAXN; i++) good.insert(i); if (n&1) {cout<<0; exit(0);} int s=0; for (int i=0; i<n; i++) s += ar[i]; kp.set(0); for (int i=0; i<n; i++){ kp |= kp << ar[i]; } if (!kp[s/2]) {cout<<0; exit(0);} for (int i=0; i<n; i++){ knap(i); } cout<<good.size()<<'\n'; for (int x: good) cout<<x<<' '; }
#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...