Submission #91002

#TimeUsernameProblemLanguageResultExecution timeMemory
91002popovicirobertBootfall (IZhO17_bootfall)C++14
100 / 100
478 ms3796 KiB
#include <bits/stdc++.h>
#define lsb(x) (x & (-x))
#define ll long long
#define ull unsigned long long
#define ld long double
// 217
// 44

using namespace std;

const int MOD = (int) 1e9 + 7;
const int MAXN = 500;

int arr[MAXN + 1];
int dp[MAXN * MAXN + 1];

inline void mod(int &x) {
    if(x >= MOD)
        x -= MOD;
}

int fr[MAXN * MAXN + 1];

int main() {
    //ifstream cin("A.in");
    //ofstream cout("A.out");
    int i, j, n;
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    cin >> n;
    dp[0] = 1;
    int sum = 0;
    for(i = 1; i <= n; i++) {
        cin >> arr[i];
        for(j = sum; j >= 0; j--) {
            dp[j + arr[i]] += dp[j];
            mod(dp[j + arr[i]]);
        }
        sum += arr[i];
    }
    if(dp[sum / 2] == 0) {
        cout << 0;
        return 0;
    }
    for(i = n; i >= 1; i--) {
        for(j = arr[i]; j <= sum; j++) {
            dp[j] -= dp[j - arr[i]] - MOD;
            mod(dp[j]);
        }
        if(i < n) {
            for(j = sum; j >= arr[i + 1]; j--) {
                dp[j] += dp[j - arr[i + 1]];
                mod(dp[j]);
            }
        }
        for(j = 0; j <= sum; j++) {
            if(dp[j] > 0) {
                int x = 2 * j - sum + arr[i];
                if(x >= 0 && x <= sum) {
                    fr[x]++;
                }
            }
        }
    }
    int ans = 0;
    for(i = 1; i <= sum; i++) {
        if(fr[i] == n) {
            ans++;
        }
    }
    cout << ans << "\n";
    for(i = 0; i <= sum; i++) {
        if(fr[i] == n) {
            cout << i << " ";
        }
    }
    //cin.close();
    //cout.close();
    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...