Submission #1270723

#TimeUsernameProblemLanguageResultExecution timeMemory
1270723LucasLeBootfall (IZhO17_bootfall)C++20
65 / 100
1067 ms13184 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];

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

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

    bool odd = false, even = false;
    for (int i = 1; i <= N; ++i) {
        std::cin >> a[i];
        sum += a[i];
        if (a[i] & 1)
            odd = true;
        else
            even = true;
    }

    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] || (odd && even)) {
        std::cout << 0 << '\n';
        return;
    }

    int ans = 0, x = 1;
    std::vector<int> res;
    if ((sum + x - a[1]) & 1) x = 2;
    for (; x <= sum; x += 2) {
        bool ok = true;
        for (int i = 1; i <= N; ++i) {
            int cur_sum = sum + x - a[i];
            if (cur_sum & 1) {
                ok = false;
                break;
            }
            if (!dp[i][cur_sum / 2]) {
                ok = false;
                break;
            }
        }

        if (ok) {
            ans++;
            res.push_back(x);
        }
    }

    std::cout << ans << '\n';
    for (int x : res)
        std::cout << x << ' ';
}

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