hdu 4119 Isabella's Message(模拟+字典树)
来源:互联网 发布:淘宝限时秒杀问题 编辑:程序博客网 时间:2024/04/30 03:18
这题有点儿烦!
模拟赛的时候写了快两个小时,终于A掉了。
#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>#define N 105char map1[N][N],map2[N][N],s[2505];char s1[5][2505],s2[5][2505];int flag[5];int n;int mark[N][N],mark1[N][N];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;elsereturn 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];elses1[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 ( 模拟 )
- [HDU 4119]Isabella's Message[字符串模拟]
- hdu 4119 Isabella's Message【字符串模拟】
- hdu 4119 Isabella's Message
- Isabella's Message HDU
- HDU 4119 Isabella's Message(字符串处理+矩阵旋转)
- hdu 4119 Isabella's Message 【字符串处理】
- HDU4119 Isabella's Message 模拟
- HDOJ 4119 Isabella's Message
- HDU 4119 Isabella's Message (2011年成都赛区现场赛I题)
- hdu4119-Isabella's Message
- Reginal2011_Chengdu_I Isabella's Message
- HDU4119 -Isabella's Message
- HDU 4119Isabella's Message2011成都现场赛I题(字符串模拟)
- Qss 阴影边框
- CUDA, 用于大量数据的超级运算:第八节
- Win7上安装IIS7并运行.net4.0程序
- iOS ShardSDK-如何自定义分享菜单中的平台列表
- EXPDE/IMPDP使用详解
- hdu 4119 Isabella's Message(模拟+字典树)
- linux常用命令之文件目录操作命令
- 使用HttpSessionListener和ServletContextListener实现在线人数和历史访问人数统计的问题
- eclipse导入jar包的方法
- EJB 3 Introduction
- 1065. A+B and C (64bit)
- linux常用命令之文件显示命令
- 1067. Sort with Swap(0,*)
- 数据库配置文件读取代码整理