Submission #499837

#TimeUsernameProblemLanguageResultExecution timeMemory
499837Ronin13Bootfall (IZhO17_bootfall)C++14
100 / 100
539 ms4484 KiB
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define pb push_back
#define epb emplace_back
#define f first
#define s second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define inf 1e9+1
#define linf 1e18+1
using namespace std;

int dp[250001];
int d[250001];
int b[250001];
void solve(){
    int n;cin>>n;
    int a[n+1];
    for(int i=1;i<=n;i++)cin>>a[i];
    dp[0]=1;
    int sum=0;
    for(int i=1;i<=n;i++){
        sum+=a[i];
    }
    if(sum&1){
        cout<<0;
        return;
    }
    for(int i=1;i<=n;i++){
        for(int x=250000;x>=0;x--){
            if(x>=a[i])dp[x]+=dp[x-a[i]];
        }
    }
    if(!dp[sum/2]){
        cout<<0;
        return;
    }
    vector<int>ans;
    for(int i=1;i<=n;i++){
        for(int j=0;j<a[i];j++)d[j]=dp[j];
        for(int j=a[i];j<=250000;j++)d[j]=dp[j]-d[j-a[i]];
        for(int j=1;j<=250000;j++){
            if(!d[j])continue;
            int x=2*j+a[i]-sum;
            if(x>0){
                b[x]++;
                if(b[x]==n)ans.pb(x);
            }
        }
    }
    cout<<ans.size()<<"\n";
    for(int to:ans)cout<<to<<' ';

}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    int test=1;//cin>>test;
    while(test--)solve();
}
#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...