Submission #77122

#TimeUsernameProblemLanguageResultExecution timeMemory
77122zetapiBootfall (IZhO17_bootfall)C++14
65 / 100
1078 ms12216 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++) candidate.insert(A); vector<int> lol; for(int A=1;A<=N;A++) { remove(arr[A]); for(auto B:candidate) { if(B>sum or (sum+B)%2 or (!dp[(sum+B)/2])) lol.pb(B); } while(!lol.empty()) { candidate.erase(lol.back()); lol.pop_back(); } add(arr[A]); } cout<<candidate.size()<<"\n"; for(auto A:candidate) 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...