제출 #877885

#제출 시각아이디문제언어결과실행 시간메모리
877885alexddBootfall (IZhO17_bootfall)C++17
28 / 100
1035 ms29272 KiB
#include<iostream> #include<bitset> using namespace std; int n,tot; int a[505]; bitset<500005> pref[505]; bitset<500005> suff[505]; int variante[250005],cntv; int newv[250005],cntnew; int sump[505]; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; tot+=a[i]; sump[i]=sump[i-1]+a[i]; } pref[0][250000]=1; for(int i=1;i<=n;i++) pref[i] = ((pref[i-1]<<a[i]) | (pref[i-1]>>a[i])); suff[n+1][250000]=1; for(int i=n;i>0;i--) suff[i] = ((suff[i+1]<<a[i]) | (suff[i+1]>>a[i])); if(pref[n][250000]==0) { cout<<0; return 0; } for(int i=1;i<=tot;i++) variante[++cntv]=i; for(int i=1;i<=n;i++) { cntnew=0; for(int j=1;j<=cntv;j++) { int x = variante[j]; for(int difs=-sump[i-1];difs<=sump[i-1];difs++) { ///difs + difd + x = 0 => difd = -difs - x ///difs + difd - x = 0 => difd = -difs + x if((-tot<=-difs-x && -difs-x<=tot && pref[i-1][difs+250000] && suff[i+1][-difs-x+250000]) || (-tot<=-difs+x && -difs+x<=tot && pref[i-1][difs+250000] && suff[i+1][-difs+x+250000])) { newv[++cntnew] = variante[j]; break; } } } cntv = cntnew; for(int j=1;j<=cntnew;j++) variante[j] = newv[j]; } cout<<cntv<<"\n"; for(int i=1;i<=cntv;i++) cout<<variante[i]<<" "; return 0; } /** difs + difd +- x = 0 => x = abs(difs + difd) x = difs + difd sau x = -difs - difd 4 1 3 1 5 6 3 5 7 11 9 13 */
#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...