|
Posted on 2009-10-06 21:55 Uriel 阅读(445) 评论(0) 编辑 收藏 引用 所属分类: POJ 、 模拟
暑假以来一直没做过模拟。。急剧退化。。搞了数小时。。WA到死啊。。。 没什么trick,没什么好说的。。。纯模拟。。。 改来改去,改来改去。。代码不是一般的恶心啊。。。
/**//*Problem: 1676 User: Uriel Memory: 180K Time: 0MS Language: C++ Result: Accepted*/
#include<stdio.h> #include<stdlib.h> #include<string.h>
int stnd[10][3][3]={{{0,1,0},{2,0,2},{2,1,2}},{{0,0,0},{0,0,2},{0,0,2}},{{0,1,0},{0,1,2},{2,1,0}}, {{0,1,0},{0,1,2},{0,1,2}},{{0,0,0},{2,1,2},{0,0,2}},{{0,1,0},{2,1,0},{0,1,2}}, {{0,1,0},{2,1,0},{2,1,2}},{{0,1,0},{0,0,2},{0,0,2}},{{0,1,0},{2,1,2},{2,1,2}}, {{0,1,0},{2,1,2},{0,1,2}}}; int i,j,k,m,cse,g,h,n,res,temp,y,nn; int minute,hour,crt[4]; int sum[2][4];//每个时间每一位有几种表示 int x[2];//每个时间有几种可能表示 int flag[5][5][12];//保存每一位的每一格,1为_,2为|,0为空 int num[10][5][5];//每一位每种可能的具体值 int Time[5][10010];//每个时间每种的可能值,化为分钟 char t[5][5][20];//输入 int main() { scanf("%d",&cse); while(1) { N: if(!cse)break; cse--; memset(t,0x00,sizeof(t)); for(i=0;i<3;i++) { getchar(); for(j=0;j<12;j++) { scanf("%c",&t[0][i][j]); } // t[0][i][12]='\0'; // printf("*%s*\n",t[0][i]); getchar(); // getchar(); for(j=0;j<12;j++) { scanf("%c",&t[1][i][j]); } // printf("*%s*\n",t[1][i]); } /**//* for(i=0;i<3;i++) { printf("%s",t[0][i]); printf("%s",t[1][i]); printf("\n"); } */ // getchar(); // getchar(); // for(i=0;i<26;i++)getchar(); // getline(); for(i=0;i<3;i++)//每个case显示一共3行 { for(j=0;j<12;j++) { if(t[0][i][j]=='_') { flag[0][i][j]=1; } else if(t[0][i][j]=='|') { flag[0][i][j]=2; } else { flag[0][i][j]=0; } if(t[1][i][j]=='_') { flag[1][i][j]=1; } else if(t[1][i][j]=='|') { flag[1][i][j]=2; } else { flag[1][i][j]=0; } } } /**//* for(i=0;i<3;i++)//每个case显示一共3行 { for(j=0;j<12;j++) { printf("%d ",flag[0][i][j]); } for(j=0;j<12;j++) { printf("%d ",flag[1][i][j]); } printf("\n"); } */ for(i=0;i<2;i++)//pre and after { for(j=0;j<4;j++)//sum of digits { sum[i][j]=0; for(h=0;h<10;h++) { if(j==0 && h>2)break; if(j==2 && h>5)break; y=0; for(k=0;k<3;k++) { for(g=0;g<3;g++) { if(flag[i][k][g+3*j]!=stnd[h][k][g] && flag[i][k][g+3*j]) { y=1; goto M; } } } M: if(!y) { // printf("*"); sum[i][j]++; num[sum[i][j]-1][i][j]=h; // if(j==1 && i==1)printf("*h=%d*",h); } } if(!sum[i][j]) { printf("Not Sure\n"); goto N; } // if(sum!=1) // { // printf("Not Sure\n"); // goto M; // } } } for(i=0;i<2;i++) { x[i]=0; for(j=0;j<sum[i][0];j++) { for(k=0;k<sum[i][1];k++) { for(h=0;h<sum[i][2];h++) { for(m=0;m<sum[i][3];m++) { Time[i][x[i]++]=(num[j][i][0]*10+num[k][i][1])*60+num[h][i][2]*10+num[m][i][3]; } } } } } res=0; for(i=0;i<x[0];i++) { for(j=0;j<x[1];j++) { // printf("*%d %d*\n",Time[0][i],Time[1][j]); if(Time[0][i]<1440 && Time[1][j]<1440 && (Time[0][i]-Time[1][j]==15 || Time[1][j]-Time[0][i]==1425)) { // printf("xx%d:%d %d:%d\n",Time[0][i]/60,Time[0][i]%60,Time[1][j]/60,Time[1][j]%60); res++; temp=i; // nn=j; } } } // printf("*%d*\n",res); // printf("*%d %d*\n",Time[0][temp],Time[1][nn]); if(res==1) { minute=Time[0][temp]%60; hour=Time[0][temp]/60; crt[0]=hour/10; crt[1]=hour%10; crt[2]=minute/10; crt[3]=minute%10; printf("%d%d%d%d\n",crt[0],crt[1],crt[2],crt[3]); } else { printf("Not Sure\n"); } } // system("PAUSE"); return 0; }
|