Submission #37425

#TimeUsernameProblemLanguageResultExecution timeMemory
37425HardNutBootfall (IZhO17_bootfall)C++14
13 / 100
139 ms4160 KiB
#include<iostream> #include<cstdio> #include<algorithm> #include<vector> #include<bitset> using namespace std; const int N = 1e5 + 5; typedef long long ll; int n, a[505], sum, dp[250005]; vector<int> vec; bitset<250005> b; int ans[250005]; int main() { // freopen("bootfall.in", "r", stdin); // freopen("bootfall.out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; sum += a[i]; } if (sum % 2 == 1) { cout << 0; return 0; } bool u = 0; dp[0] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j <= sum; j++) { if (dp[j]) { if (j + a[i] == sum / 2) u = 1; dp[j + a[i]] = 1; } } } for (int i = 1; i <= sum; i++) ans[i] = 1; if (!u) { cout << 0; return 0; } for (int i = 1; i <= n; i++) { b.reset(); b[0] = 1; for (int j = 1; j <= n; j++) { if (i != j) b |= (b << a[j]); } for (int j = 1; j <= sum; j++) { if ((sum + j - a[i]) % 2) { ans[j] = 0; continue; } if (!b[(sum + j - a[i]) / 2]) { ans[j] = 0; } } } int cnt = 0; for (int i = 1; i <= sum; i++) { cnt += ans[i]; } cout << cnt << "\n"; for (int i = 1; i <= sum; i++) if (ans[i]) 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...