Submission #77124

#TimeUsernameProblemLanguageResultExecution timeMemory
77124zetapiBootfall (IZhO17_bootfall)C++14
100 / 100
754 ms3088 KiB
#include "bits/stdc++.h" using namespace std; #define pb push_back #define mp make_pair #define ll int #define int int #define itr iterator typedef pair<ll,ll> pii; const ll MAX=3e5+9; const ll LIM=3e5; const ll mod=1e9+7; bitset<500*500+9> bs; set<ll> candidate; ll N,sum,arr[500*500+9],dp[500*500+9]; void add(ll X) { sum+=X; for(int A=500*500;A>=X;A--) { dp[A]+=dp[A-X]; if(dp[A]>=mod) dp[A]-=mod; } return ; } void remove(ll X) { sum-=X; for(int A=X;A<=500*500;A++) { dp[A]-=dp[A-X]; if(dp[A]<0) dp[A]+=mod; } return ; } signed main() { scanf("%d",&N); dp[0]=1; for(int A=1;A<=N;A++) { scanf("%d",&arr[A]); add(arr[A]); } if(sum%2 or (!dp[sum/2])) return cout<<0,0; for(int A=1;A<=sum;A++) bs[A]=1; int mn=sum; for(int A=1;A<=N;A++) { remove(arr[A]); mn=min(mn,sum); for(int B=1;B<=sum;B++) { if((sum+B)%2 or (!dp[(sum+B)/2])) bs[B]=0; } add(arr[A]); } vector<int> res; for(int A=1;A<=mn;A++) if(bs[A]) res.pb(A); cout<<res.size()<<"\n"; for(auto A:res) cout<<A<<" "; return 0; }

Compilation message (stderr)

bootfall.cpp: In function 'int main()':
bootfall.cpp:48:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&N);
  ~~~~~^~~~~~~~~
bootfall.cpp:52:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&arr[A]);
   ~~~~~^~~~~~~~~~~~~~
#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...