USACO 2.2 Party Lamps

来源:互联网 发布:工业机器人应用编程 编辑:程序博客网 时间:2024/04/29 10:24
/*ID:skylove3PROG: lampsLANG: C++2012/6/12拖了 加起来 有 7,8 个小时的样子,自己太弱了。 只要分析前六个。分奇偶,c 为 奇数时和1,3 一样偶数时和2,4一样。*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorithm>//===========================================================int p1[4] ={0,42,21,27};int p2[7] ={42,21,36,0,49,14,63};int p3[7] ={36,49,14,27,0,42,21};int p4[9] = {27,63,42,21,36,0,49,14,63};int m,on=1,off=1,On[200],OFF[200];int mark[100];int out[200];int res[200];int n,c,i;int ans[70];int flag2=0;int cmp(const void *a,const void *b){   return (*(int *)a-*(int *)b);}bool check(int s){ int i,j,temp; for(i=1;i<=on;i++) {     temp = 1 << (6- On[i]); if(! (temp & s))  {    return 0;  }  } for(i=1;i<=off;i++) {  temp = 1 << (6- OFF[i]);  if((temp & s) != 0)  {     return 0;  } } return 1;}void print(int num){int i=0,j;memset(out,0,sizeof(out));if(num!=0){while( num!=1){out[i] = num%2;num = num>>1;i++;}out[i++] =1;out[i] = 0;}for(j=5,i=0;j>=0,i<=5;j--,i++){res[i] = out[j];}for(i=0;i<n;i++){printf("%d",res[i%6]);}printf("\n");}int main(){  // freopen("in.txt","r",stdin);freopen("lamps.in","r",stdin);     freopen("lamps.out","w",stdout); scanf("%d%d",&n,&c);     int flag =0 ; while(scanf("%d",&m) && m!=-1) { flag = 1;     On[on++] = m%6; } on--; while(scanf("%d",&m)&& m!=-1) { flag =1;    OFF[off++] = m%6; } off--;     int k,t,index=0; if(c==0 && flag==0) { while(n--) { printf("1"); } printf("\n"); return 0; } if(c==0 && flag!=0) { printf("IMPOSSIBLE\n"); return 0; } if(c ==1) { for(i=0;i<4;i++){t= p1[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);}} } if(c ==2) { for(i=0;i<7;i++) {     t= p2[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);} } }  if(c ==3) { for(i=0;i<7;i++) {     t= p3[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);} } }  if(c ==4) { for(i=0;i<9;i++) {     t= p4[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t; mark[t]=1;//print(t);} } } if(c %2 ==1 && c>4) {for(i=0;i<4;i++){t= p1[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);}}for(i=0;i<4;i++){t = p3[i];if( check(t) == 1 && mark[t]==0){//cout<<t<<endl;ans[index++]=t; mark[t]=1;//print(t);}} }  if(c %2 ==0 && c>4) {for(i=0;i<7;i++){t= p2[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);}}      for(i=0;i<9;i++) {     t= p4[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);} }  }// printf("index = =%d\n",index);  if(index==1)  {  printf("IMPOSSIBLE\n");  return 0;  } qsort(ans,index,sizeof(int),cmp); for(i=0;i<index;i++) {print(ans[i]);// printf("%d \n",ans[i]); }  return 0;}

原创粉丝点击