hdu 4119 Isabella's Message(模拟+字典树)
2013-10-10 19:40
309 查看
这题有点儿烦!
模拟赛的时候写了快两个小时,终于A掉了。
模拟赛的时候写了快两个小时,终于A掉了。
#include<stdio.h> #include<string.h> #include<malloc.h> #include<stdlib.h> #define N 105 char map1 ,map2 ,s[2505]; char s1[5][2505],s2[5][2505]; int flag[5]; int n; int mark ,mark1 ; struct node { node *next[27]; int flag; }*root; struct point { int x,y; }a[100005]; int cmp(const void *a,const void *b) { return strcmp((char *)a,(char *)b); } int cmp1(const void *a,const void *b) { point *c=(point *)a; point *d=(point *)b; if(c->x!=d->x) return c->x-d->x; else return c->y-d->y; } void Init(node *s) { s->flag=0; memset(s->next,0,sizeof(s->next)); return ; } void InsertTree(char *s) { int ln=strlen(s); node *p=root,*q; for(int i=0;i<ln;i++) { int t=s[i]-'a'; if(p->next[t]!=NULL) p=p->next[t]; else { q=(node *)malloc(sizeof(node)); Init(q); p->next[t]=q; p=q; } if(i==ln-1) p->flag=1; } return ; } int fun(int t,int tt,int ttt) { int k=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { int x,y; if(mark[i][j]==1) { if(t==0) x=i,y=j; else if(t==1) x=j,y=n-i-1; else if(t==2) x=n-i-1,y=n-j-1; else if(t==3) x=n-j-1,y=i; a[k].x=x; a[k].y=y; k++; } } } qsort(a,k,sizeof(a[0]),cmp1); for(int i=0;i<k;i++) { int ca,cao; ca=a[i].x; cao=a[i].y; if(map1[ca][cao]!='.'&&mark1[ca][cao]!=-1) { s1[ttt][tt++]=map1[ca][cao]; mark1[ca][cao]=-1; } else if(mark1[ca][cao]!=-1) { s1[ttt][tt++]=' '; mark1[ca][cao]=-1; } } return tt; } /* void fuck(int x) { qsort(a,flag[x],sizeof(a[0]),cmp1); for(int i=0;i<flag[x];i++) { int t,tt; t=a[i].x; tt=a[i].y; if(map1[t][tt]!='.') s1[x][i]=map1[t][tt]; else s1[x][i]=' '; } return ; } */ int Find(char *s) { node *p=root; int ln=strlen(s); for(int i=0;i<ln;i++) { int t=s[i]-'a'; if(p->next[t]!=NULL) p=p->next[t]; else return 0; if(i==ln-1&&p->flag==0) return 0; } return 1; } int judge(char *s) { char ss[2505]; int k=0; int ln=strlen(s); for(int i=0;i<ln;i++) { if(s[i]!=' ') ss[k++]=s[i]; else { ss[k]='\0'; if(!Find(ss)) return 0; k=0; } } ss[k]='\0'; if(!Find(ss)) return 0; return 1; } int main() { int T; scanf("%d",&T); int cnt=1; while(T--) { scanf("%d",&n); getchar(); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) scanf("%c",&map1[i][j]); getchar(); } memset(mark,0,sizeof(mark)); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%c",&map2[i][j]); if(map2[i][j]=='.') mark[i][j]=0; else mark[i][j]=1; } getchar(); } int m; root=(node *)malloc(sizeof(node)); Init(root); scanf("%d",&m); getchar(); while(m--) { gets(s); InsertTree(s); } memset(flag,0,sizeof(flag)); memset(mark1,0,sizeof(mark1)); flag[0]=fun(0,flag[0],0); flag[0]=fun(1,flag[0],0); flag[0]=fun(2,flag[0],0); flag[0]=fun(3,flag[0],0); //fuck(0); memset(mark1,0,sizeof(mark1)); flag[1]=fun(1,flag[1],1); flag[1]=fun(2,flag[1],1); flag[1]=fun(3,flag[1],1); flag[1]=fun(0,flag[1],1); //fuck(1); memset(mark1,0,sizeof(mark1)); flag[2]=fun(2,flag[2],2); flag[2]=fun(3,flag[2],2); flag[2]=fun(0,flag[2],2); flag[2]=fun(1,flag[2],2); //fuck(2); memset(mark1,0,sizeof(mark1)); flag[3]=fun(3,flag[3],3); flag[3]=fun(0,flag[3],3); flag[3]=fun(1,flag[3],3); flag[3]=fun(2,flag[3],3); //fuck(3); for(int i=0;i<4;i++) { int k=0; for(int j=0;j<flag[i];j++) { if(k==0&&s1[i][j]==' ') continue; if(s1[i][j]!=' ') s2[i][k++]=s1[i][j]; else if(s2[i][k-1]!=' '&&s1[i][j]==' ') s2[i][k++]=s1[i][j]; else continue; } while(s2[i][k-1]==' ') k--; s2[i][k]='\0'; flag[i]=k; } qsort(s2,4,sizeof(s2[0]),cmp); int i; for(i=0;i<4;i++) { if(judge(s2[i])) break; } if(i==4) { printf("Case #%d: FAIL TO DECRYPT\n",cnt++); continue; } s2[i][flag[i]]='\0'; printf("Case #%d: %s\n",cnt++,s2[i]); } return 0; }
相关文章推荐
- hdu 4119 Isabella's Message(模拟)
- HDU 4119 Isabella's Message(模拟)
- hdu 4119 Isabella's Message ( 模拟 )
- HDU 4119 Isabella's Message(字符串处理+矩阵旋转)
- HDU 4119 Isabella's Message (2011年成都赛区现场赛I题)
- hdu 4119 Isabella's Message【字符串模拟】
- HDOJ 4119 Isabella's Message
- HDU 4119 Isabella's Message(模拟)
- [HDU 4119]Isabella's Message[字符串模拟]
- hdu 4119 Isabella's Message 【字符串处理】
- HDU 1103.Flo's Restaurant【模拟】【3月2】
- HDU 4706 Children's Day(模拟啊)
- HDU4706——Children's Day(简单模拟)
- Reginal2011_Chengdu_I Isabella's Message
- HDU 1009 FatMouse' Trade (模拟)
- hdu 5640 King's Cake(模拟)
- hdu 5641 King's Phone 模拟
- HDU-#4706 Children's Day(模拟)
- Isabella's Message HDU - 4119 (模拟)
- HDU 4706 Children's Day(模拟)