Submission #1154927

#TimeUsernameProblemLanguageResultExecution timeMemory
1154927ladnooooBootfall (IZhO17_bootfall)C++20
100 / 100
334 ms5908 KiB
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")
#define pb push_back
#define int long long

const int maxN = 25e4 + 7;
int dp[maxN], cnt[maxN];
void solveStupid() {
    int n;
    cin >> n;
    vector<int> a(n);
    int sum = 0;
    dp[0] = 1;
    for(int i = 0; i < n; i++) {
        cin >> a[i];
        for(int j = maxN - 1; j >= a[i]; j--) {
            dp[j] += dp[j - a[i]];
        }
        sum += a[i];
    }

    if(sum % 2 == 1 || dp[sum / 2] == 0) {
        cout << "0\n";
        return;
    }

    /*for(int i = 1; i <= sum; i++) {
        cout << i << ':' << dp[i] << '\n';
    }*/
    for(int i = 0; i < n; i++){
        for(int j = a[i]; j < maxN; j++){
            dp[j] -= dp[j - a[i]];
        }
        for(int j = 0; j <= sum - a[i]; j++){
            if(!dp[j]) continue;
            int x = j, y = sum - a[i] - j;
            cnt[abs(x - y)]++;
        }
        for(int j = maxN - 1; j >= a[i]; j--){
            dp[j] += dp[j - a[i]];
        }
    }

    vector<int> res;
    for(int i = 0; i < maxN; i++) {
        if(cnt[i] == n * 2) res.pb(i);
    }

    int z = res.size();
    cout << z << '\n';
    for(int x : res) {
        cout << x << ' ';
    }
}
signed main() {
    //freopen("input.txt", "r", stdin);
    //freopen("sum.in", "r", stdin);
    //freopen("sum.out", "w", stdout);
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t = 1;
    //cin >> t;
    while (t--) {
        solveStupid();
    }
}
#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...