제출 #1257307

#제출 시각아이디문제언어결과실행 시간메모리
1257307medaaBootfall (IZhO17_bootfall)C++20
100 / 100
233 ms4460 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
void SOLVE() {
    int n; cin >> n;
    vector<int> a(n);
    for(auto & val : a) cin >> val;
    int sum = accumulate(a.begin(), a.end(), 0);
    if(sum & 1) return void(cout << 0 << endl);

    vector<ll> dp(sum + 1);
    dp[0] = 1;
    for(int i = 0; i < n; i++){
        for(int j = sum - a[i]; j >= 0; j--){
            dp[j + a[i]] += dp[j];
        }
    }
    if(!dp[sum / 2]) return void(cout << 0 << endl);

    vector<int> freq(sum + 1);
    for(int i = 0; i < n; i++){
        for(int j = 0; j <= sum - a[i]; j++) 
            dp[j + a[i]] -= dp[j];
        sum -= a[i];

        for(int j = 0; j <= sum / 2; j++) 
            if(dp[j]) freq[sum - 2 * j]++; 

        sum += a[i];
        for(int j = sum - a[i]; j >= 0; j--) 
            dp[j + a[i]] += dp[j];
    }

    vector<int> answer;
    for(int i = 1; i <= sum; i++){
        if(freq[i] == n) answer.push_back(i);
    }
    cout << answer.size() << endl;
    for(auto v : answer) cout << v << " ";
}
signed main(){
    ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int o_o = 1; //cin >> o_o;
    while(o_o --) SOLVE();
    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...