HDU 4119

来源:互联网 发布:淘宝助理菜鸟统一模板 编辑:程序博客网 时间:2024/06/05 04:13

题意描述起来略麻烦,就不说了。模拟题。

WA了一个下午。。。。当时都有点想放弃了。总的来说 还是很爽的

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct dian{int r,c;}point[100005];char dic[105][25];struct final{char data[100005];int num;}sorted[10];bool cmpsorted(final a,final b){return strcmp(a.data,b.data)<0;}bool cmp(dian a,dian b){if(a.r!=b.r)return a.r<b.r;elsereturn a.c<b.c;}int main(){//freopen("11.txt","rt",stdin);//freopen("out.txt","wt",stdout);int t,cas=1;scanf("%d",&t);    while(t--){int n,i,j,k;for(i=0;i<4;i++){sorted[i].data[0]='\0';  sorted[i].num=i ; }scanf("%d",&n);getchar();char map[55][55];for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%c",&map[i][j]);if(map[i][j]=='.')map[i][j]=' ';}getchar();}int pointnum=0;for(i=0;i<n;i++){for(j=0;j<n;j++){char c=getchar();if(c=='*'){  point[pointnum].r=i; point[pointnum++].c=j ; }}getchar();}int dicnum;scanf("%d",&dicnum);for(i=0;i<dicnum;i++)scanf("%s",dic[i]);char rec[5][100005];for(k=0;k<4;k++){int len=0;for(j=0;j<4;j++){for(i=0;i<pointnum;i++){rec[k][len++]=map[point[i].r][point[i].c];int t=point[i].r;point[i].r=point[i].c;point[i].c=n-1-t;}sort(point,point+pointnum,cmp);}rec[k][len]='\0';for(i=0;i<pointnum;i++){int t=point[i].r;point[i].r=point[i].c;point[i].c=n-1-t;}sort(point,point+pointnum,cmp);}//for(i=0;i<4;i++)//printf("%s\n",rec[i]); int legal[10];for(i=0;i<4;i++)legal[i]=1;for(i=0;i<4;i++){int begin=0,last;int len=strlen(rec[i]);//也可以在rec[i]的后面加一个空格字符,这样后面可以统一处理for(j=0;j<len;j++){if(j==len-1&&rec[i][j]!=' ')//一开始WA的原因是写了句if(j==len-1||rec[i][j]==' ')本来想{                             //处理最后一位的,后来发现如果最后一位是空格的话,在sorted里面会多记录一个空格last=j;if(begin<=last){char temp[10005];int lt=0;for(k=begin;k<=last;k++)temp[lt++]=rec[i][k];temp[lt]='\0';int x=strlen(sorted[i].data);if(!x)strcat(sorted[i].data,temp);else{sorted[i].data[x]=' ';sorted[i].data[x+1]='\0';strcat(sorted[i].data,temp);}int found=0;for(k=0;k<dicnum;k++){if(strcmp(dic[k],temp)==0)found=1;}if(!found){legal[i]=0; break; }}}else if(rec[i][j]==' '){last=j-1;if(begin<=last){char temp[10005];int lt=0;for(k=begin;k<=last;k++)temp[lt++]=rec[i][k];temp[lt]='\0';int x=strlen(sorted[i].data);if(!x)strcat(sorted[i].data,temp);else{sorted[i].data[x]=' ';sorted[i].data[x+1]='\0';strcat(sorted[i].data,temp);}int found=0;for(k=0;k<dicnum;k++){if(strcmp(dic[k],temp)==0)found=1;}if(!found){legal[i]=0; break; }}begin=j+1;}}}//forsort(sorted,sorted+4,cmpsorted);int is_print=0;printf("Case #%d: ",cas++);for(i=0;i<4;i++){if(legal[sorted[i].num]&&strlen(sorted[i].data)){printf("%s\n",sorted[i].data);is_print=1;break;}}if(!is_print)printf("FAIL TO DECRYPT\n");}return 0;}