제출 #541113

#제출 시각아이디문제언어결과실행 시간메모리
541113creepedBootfall (IZhO17_bootfall)C++14
13 / 100
1 ms340 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll a[250002];
ll sum = 0;
ll cnt[250002];
ll mp[250002];

void add(ll x)
{
    for(ll i = sum; i>=0; i--)
        cnt[i+x] += cnt[i];
    sum += x;
}

void sub(ll x)
{
    for(ll i=0;i<=sum; i++)
        cnt[i+x] = max(cnt[i+x] - cnt[i], 0LL);
    sum -= x;
}


int main() {

    cin>>n;
    cnt[0] = 1;
    for(ll i=1;i<=n;i++)
    {
        cin>>a[i];
        add(a[i]);
    }

    if(sum&1 || !cnt[sum/2])
    {
        cout<<"0\n";
        return 0;
    }

    for(ll i=1;i<=n;i++)
    {
        sub(a[i]);
        ll v = 2;
        if(sum & 1)
            v--;
        for(ll j=v; j<=sum; j+=2)
        {
            if(cnt[(sum + j) / 2 - j])
                mp[j] ++;
        }
        add(a[i]);
    }
    vector<ll> ans;
    for(ll i=1;i<=sum;i++)
        if(mp[i] == n)
            ans.push_back(i);
    cout<<ans.size()<<endl;
    for(auto it:ans)
        cout<<it<<" ";
    cout<<endl;
}
#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...