제출 #1127046

#제출 시각아이디문제언어결과실행 시간메모리
1127046brover29Bootfall (IZhO17_bootfall)C++20
28 / 100
1095 ms34632 KiB
#include <bits/stdc++.h> //qwerty47924692 using namespace std; using ll = int; const ll N=72900+3; const string br="617283"; ll n,sum,a[505],nxt[N],sz,s; bool dpr[505][N],dsu[505][N],dp[N]; vector<ll>pos[N]; void solve(ll i,ll sum){ ll prv=0; for(ll w=1;w<=sum;w++)dp[w]=0; dp[0]=1; for(ll j=1;j<=n;j++){ if(i==j)continue; for(ll w=sum;w>=a[j];w--){ dp[w]|=dp[w-a[j]]; } } for(ll x=s;x<=72900;x=nxt[x]){ ll need=(sum+x)>>1; if((sum+x)&1)goto doo; if(dp[need]){ prv=x; // cout<<x<<' '; goto fin; } doo:; sz--; if(!prv){ s=nxt[x]; }else{ nxt[prv]=nxt[x]; } fin:; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; for(ll i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; } sort(a+1,a+1+n); reverse(a+1,a+1+n); dpr[0][0]=1; dsu[n+1][0]=1; pos[0].push_back(0); for(ll i=1;i<=n;i++){ for(ll w=0;w<=sum;w++){ if(w>=a[i])dpr[i][w]|=dpr[i-1][w-a[i]]; dpr[i][w]|=dpr[i-1][w]; if(dpr[i][w])pos[i].push_back(w); } }for(ll i=n;i>=1;i--){ for(ll w=sum;w>=0;w--){ if(w>=a[i])dsu[i][w]|=dsu[i+1][w-a[i]]; dsu[i][w]|=dsu[i+1][w]; } } if(!dpr[n][sum/2]||sum&1){ cout<<0; return 0; } s=1,sz=72900; for(ll i=1;i<=72900;i++){ nxt[i]=i+1; } for(ll i=1;i<=n;i++){ solve(i,sum-a[i]); // return 0; //cout<<'\n'; } cout<<sz<<'\n'; for(ll x=s;x<=72900;x=nxt[x]){ cout<<x<<' '; } }
#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...