Submission #172965

#TimeUsernameProblemLanguageResultExecution timeMemory
172965VEGAnnBootfall (IZhO17_bootfall)C++14
100 / 100
725 ms4096 KiB
#include <bits/stdc++.h> #define sz(x) ((int)x.size()) #define PB push_back #define all(x) x.begin(),x.end() using namespace std; const int N = 510; const int N2 = N * N; const int PW = 10; const int VL = (1 << PW); const int oo = 2e9; const int K = 11; const int md = int(1e9) + 7; vector<int> ans, nw; int f[N2], a[N], n, pref; int sum(int x, int y){ return (x + y) % md; } void BAD(){ cout << 0; exit(0); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; f[0] = 1; for (int i = 0; i < n; i++) { cin >> a[i]; pref += a[i]; for (int j = pref; j >= a[i]; j--) f[j] = sum(f[j], f[j - a[i]]); } if (pref & 1) BAD(); if (f[pref >> 1] == 0) BAD(); ans.clear(); for (int i = 1; i < N2; i++) ans.PB(i); for (int i = 0; i < n; i++){ for (int j = a[i]; j <= pref; j++) f[j] = sum(f[j], md - f[j - a[i]]); nw.clear(); for (int x : ans){ int sm = pref - a[i] + x; if (sm & 1) continue; if (f[sm >> 1] == 0) continue; nw.PB(x); } ans = nw; for (int j = pref; j >= a[i]; j--) f[j] = sum(f[j], f[j - a[i]]); } cout << sz(ans) << '\n'; for (int x : ans) cout << x << " "; 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...