제출 #499837

#제출 시각아이디문제언어결과실행 시간메모리
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...