Submission #566484

#TimeUsernameProblemLanguageResultExecution timeMemory
566484UzoufBootfall (IZhO17_bootfall)C++14
0 / 100
1 ms512 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> //#include "xylophone.h" using namespace std; using namespace __gnu_pbds; #define int long long #define endl "\n" int mod=67289407956;//1e9+7; const int N=505;//2e5+5; const int M=250005; template<class x> using ordered_multiset = tree<x, null_type,less_equal<x>, rb_tree_tag,tree_order_statistics_node_update>; int n,sum; int v[N],dp[N],kk[N]; vector<int> ans; void remove(int nm) { for (int j=nm;j<=M;j++) { dp[j]-=dp[j-nm]; if (dp[j]>=mod) dp[j]%=mod; } } void add(int nm) { for (int j=M;j>=nm;j--) { dp[j]+=dp[j-nm]; if (dp[j]>=mod) dp[j]%=mod; } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen(".in", "r", stdin); freopen(".out", "w", stdout); cin>>n; for (int i=0;i<n;i++) { cin>>v[i]; sum+=v[i]; } dp[0]=1; for (int i=0;i<n;i++) { for (int j=M;j>=v[i];j--) { dp[j]+=dp[j-v[i]]; if (dp[j]>=mod) dp[j]%=mod; } } if (dp[sum/2]==0 || sum%2!=0) { cout<<0; return 0; } for (int i=1;i<=sum;i++) { kk[i]=1; } for (int i=0;i<n;i++) { remove(v[i]); for (int j=1;j<=sum;j++) { int nw=sum-v[i]+j; if (nw/2<j) {kk[j]=0; continue;} if (dp[(nw/2)-j]==0 || (j+v[i])%2!=0) kk[j]=0; } add(v[i]); } for(int i=1;i<=M;i++) { if (kk[i]==1) ans.push_back(i); } cout<<ans.size()<<endl; for (int i:ans) cout<<i<<' '; }
#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...