Submission #1323722

#TimeUsernameProblemLanguageResultExecution timeMemory
13237221otaBootfall (IZhO17_bootfall)C++20
65 / 100
1010 ms1120 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O3")
#pragma GCC target("sse4,avx2,fma,avx")
using namespace std;

#define endl "\n"
#define entire(x) (x).begin(), (x).end()

int32_t main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);

    int n; cin >> n;
    vector<int> a(n);
    bitset<250001> init; init[0] = 1;
    for (int i = 0; i < n; i++){
        cin >> a[i]; init |= init << a[i];
    }

    int sum = accumulate(entire(a), 0ll);
    if (sum % 2 or !init[sum/2]) { cout << 0 << endl; return 0; }
    
    bitset<250001> ans;
    for (int i = 1; i <= sum; i++) ans[i] = 1;

    for (int idx = 0; idx < n; idx++){
        bitset<250001> cur, good; cur[0] = 1;
        for (int i = 0; i < n; i++) if (i != idx) cur |= cur << a[i];
        for (int i = a[idx] % 2; i <= sum - a[idx]; i += 2) {
            int target = (sum - a[idx] + i);
            if (target % 2) continue; target >>= 1;
            good[i] = cur[target] | cur[target - i];
        } ans &= good;
    }

    cout << ans.count() << endl;
    for (int i = 1; i <= sum; i++) if (ans[i]) cout << i << " ";
    cout << endl;

    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...