Submission #1271228

#TimeUsernameProblemLanguageResultExecution timeMemory
1271228LucasLeBootfall (IZhO17_bootfall)C++20
65 / 100
1097 ms13096 KiB
#include <bits/stdc++.h>

#define fi first
#define se second
#define ld long double
#define pii std::pair<int, int>
#define piii std::pair<pii, pii>

#define rep(i,a) for (int i = 0; i < a; ++i)
#define per(i,a) for (int i = a - 1; i >= 0; --i)

int N;
int sum;
int a[505];
std::bitset<250001> dp[502];

int cnt[250001];

void solve() {
    std::cin >> N;

    for (int i = 1; i <= N + 1; ++i)
        dp[i][0] = 1;

    for (int i = 1; i <= N; ++i) {
        std::cin >> a[i];
        sum += a[i];
    }

    if (N == 1) {
        std::cout << 0 << '\n';
        return;
    }

    for (int i = 1; i <= N + 1; ++i) {
        for (int j = 1; j <= N; ++j) if (i != j) {
            dp[i] |= (dp[i] << a[j]);
        }
    }

    if ((sum & 1) || !dp[N + 1][sum / 2]) {
        std::cout << 0 << '\n';
        return;
    }

    for (int x = 0; x <= sum; ++x) {
        for (int i = 1; i <= N; ++i) if (dp[i][x]) {
            int val = x * 2 + a[i] - sum;
            if (val >= 1 && val <= sum)
                cnt[val]++;
        }
    }

    int ans = 0;
    for (int i = 1; i <= sum; ++i)
        if (cnt[i] == N) ans++;

    std::cout << ans << '\n';
    for (int i = 1; i <= sum; ++i)
        if (cnt[i] == N)
            std::cout << i << ' ';
}

int main() {
//     std::freopen("input.txt", "r", stdin);
    // std::freopen("palin.inp", "r", stdin);
    // std::freopen("sushi.out", "w", stdout);
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(0);

    int T = 1;
    // std::cin >> T;
    while (T--)
        solve();

}

// 14 / 2 (87.5% Rate)
#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...