Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
1011 stick精简版 0MS 程序#include<iostream> #include<algorithm> using namespace std; int cas,m,data[20],i,j,k,sum,f,used[20]; int search(int realb,int begin,int end) { if(data[begin]+data[end]>sum) return 0; int i; for(i=begin;i<end;i++) { if(used[i]==0) { if(data[i]+data[end]==sum) { used[i]=used[end]=1; f++; if(f==3) return 1; int b=end; while(used[b]) b--; if(i==realb) { int t=i+1; while(used[t]) t++; if(search(t,t,b)) return 1; f--; used[i]=used[end]=0; return 0; } else { if(search(realb,realb,b)) return 1; f--; used[i]=used[end]=0; return 0; } } } } int last,lastdata; last=lastdata=-1; for(i=begin;i<end;i++) { if(used[i]==0) { if(data[i]+data[end]<sum&&data[i]!=lastdata) { used[i]=1; data[end]+=data[i]; int a=i+1; while(used[a]) a++; if(i==realb) { if(search(a,a,end)) return 1; lastdata=data[i]; data[end]-=data[i]; } else { if(search(realb,a,end)) return 1; lastdata=data[i]; data[end]-=data[i]; } used[i]=0; if(data[i]+data[end]>sum) return 0; } } } return 0; } int main() { scanf("%d",&cas); for(i=1;i<=cas;i++) { cin>>m; sum=0; for(j=0;j<m;j++) { cin>>data[j]; sum+=data[j]; } if(m<=3||sum%4) { printf("no\n"); continue; } sum/=4; f=0; memset(used,0,sizeof(used)); sort(data,data+m); for(j=0;j<m;j++) if(data[j]==sum) { f++; used[j]=1; } if(f==3||f==4) { cout<<"yes\n"; continue; } int a=0,b=m-1; while(used[a]) a++; while(used[b]) b--; if(search(a,a,b)) { cout<<"yes\n"; } else printf("no\n"); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator