Submission #164779

#TimeUsernameProblemLanguageResultExecution timeMemory
164779mosiashvililukaBootfall (IZhO17_bootfall)C++14
44 / 100
1081 ms5848 KiB
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e,f[509],p[509],pi,jm,pas[250009],pa;
bitset <250007> dp[177];
set <int> s;
set <int>::iterator it;
int main(){
	ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>a;
	for(c=1; c<=a; c++) cin>>f[c];
	if(a==1){
		cout<<0;
		return 0;
	}
	for(c=1; c<=a; c++){
		s.insert(f[c]);
	}
	for(it=s.begin(); it!=s.end(); it++){
		pi++;
		p[pi]=(*it);
	}
	d=0;
	for(c=1; c<=a; c++) d+=f[c];
	e=d;
	jm=e;
	for(c=2; c<=a; c++){
		if(f[c]%2!=f[c-1]%2){
			cout<<0;
			return 0;
		}
	}
/*	for(c=1; c<=pi; c++) cout<<p[c]<<" ";
	cout<<endl<<endl;*/
	for(c=1; c<=pi+1; c++){
//	    cout<<jm<<endl;
	    dp[c][0]=1;
	    e=0;
		for(d=1; d<=a; d++){
    		if(f[d]==p[c]&&e==0){
			   e=1;
			   continue;
			}
			//if(c==1) cout<<d<<" ";
			dp[c]=dp[c]|(dp[c]<<f[d]);
		}
		dp[c][0]=0;
//		dp[c][jm-p[c]]=0;
	}
//	cout<<dp[1][400]<<endl;
/*	cout<<endl;
	for(c=1; c<=14; c++){
	    cout<<c<<" "<<dp[1][c]<<endl;
	}*/
//	cout<<dp[4][5]<<endl;
	if(f[1]%2==0) d=2; else d=1;
	for(c=d; c<=jm; c+=2){
		pi++;p[pi]=c;
		jm+=c;
		e=0;
		for(d=1; d<=pi; d++){
			if(d==pi){
			if((jm-p[d])%2==1||dp[pi][(jm-p[d])/2]==0){
//			    if(c==600) cout<<jm<<" "<<p[d]<<" "<<d<<endl;
//			    if(c==3) cout<<jm<<" "<<p[d]<<" "<<d<<endl;
				e=1;break;
			}
			}else{
			if((jm-p[d])%2==1||dp[d][(jm-p[d])/2]==0){
//			    if(c==600) cout<<jm<<" "<<p[d]<<" "<<d<<endl;
//			    if(c==3) cout<<jm<<" "<<p[d]<<" "<<d<<endl;
				e=1;break;
			}
			}
		}
		if(e==0){
			pa++;
			pas[pa]=c;
		}
		jm-=c;
		pi--;
	}
	cout<<pa<<endl;
	for(c=1; c<=pa; c++) cout<<pas[c]<<" ";
	return 0;
}
#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...