Submission #173518

#TimeUsernameProblemLanguageResultExecution timeMemory
173518AllMightBootfall (IZhO17_bootfall)C++14
100 / 100
468 ms4080 KiB
#include <iostream> #include <algorithm> #include <vector> using namespace std; const int N = 502; int n; int a[N]; int knp[N * N]; int cnt[N * N]; vector <int> v; void check(int ind, int sum) { for (int i = a[ind]; i <= sum; i++) knp[i] -= knp[i - a[ind]]; sum -= a[ind]; for (int i = 0; 2 * i < sum; i++) { if (!knp[i]) continue; int ans = sum - 2 * i; cnt[ans]++; if (ind == 0) v.push_back(ans); } for (int i = sum; i >= 0; i--) knp[i + a[ind]] += knp[i]; } int main() { ios_base::sync_with_stdio(false); cin >> n; int mx = 0; knp[0] = 1; for (int i = 0; i < n; i++) { cin >> a[i]; for (int j = mx; j >= 0; j--) { if (knp[j]) { knp[j + a[i]] += knp[j]; mx = max(mx, j + a[i]); } } } int sum = mx; if (sum % 2 || !knp[sum / 2]) { cout << "0\n"; return 0; } for (int i = 0; i < n; i++) check(i, sum); vector <int> ans; for (int i = 0; i < v.size(); i++) if (cnt[v[i]] == n) ans.push_back(v[i]); sort(ans.begin(), ans.end()); cout << ans.size() << endl; for (int i = 0; i < ans.size(); i++) cout << ans[i] << ' '; cout << endl; return 0; }

Compilation message (stderr)

bootfall.cpp: In function 'int main()':
bootfall.cpp:61:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < v.size(); i++)
                  ~~^~~~~~~~~~
bootfall.cpp:67:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < ans.size(); 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...