hdu 4119 Isabella's Message【字符串模拟】

题目链接:http://write.blog.csdn.net/postedit

自我感觉比较麻烦

#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<iostream>

#include<string>

#include<map>

using namespace std;

const int maxh=100+10;

const int maxe=100+10;

typedef struct Node

{

char s[maxh*maxh];

};

Node E[4];

char mode[maxh][maxh],mail[maxh][maxh];

int n,m,H[4];

bool cmp(Node a,Node b)

{

return strcmp(a.s,b.s)<0;

}

void take()

{

char s[maxh*maxh*4];

memset(s,0,sizeof(s));

int h=0,h1,h2,h3,num=0,l,e,flag,i,j;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

if(mode[i][j]==‘*‘)

{

s[h++]=mail[i][j];

num++;

}

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

if(mode[n-j-1][i]==‘*‘)

s[h++]=mail[i][j];

}

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

if(mode[n-1-i][n-1-j]==‘*‘)

s[h++]=mail[i][j];

}

for(i=0;i<n;i++)

for(j=0;j<n;j++)

if(mode[j][n-1-i]==‘*‘)

s[h++]=mail[i][j];

char ss[3][maxh*maxh];

memset(ss,0,sizeof(ss));

memset(E,0,sizeof(E));

for(i=num,h1=0;h1<h;h1++,i=(i+1)%h)

ss[0][h1]=s[i];

for(i=num+num,h2=0;h2<h;h2++,i=(i+1)%h)

ss[1][h2]=s[i];

for(h3=0,i=num+num+num;h3<h;h3++,i=(i+1)%h)

{

ss[2][h3]=s[i];

}

l=0;

while(s[l]==‘ ‘)l++;

while(s[h-1]==‘ ‘)h--;

int e1=0,e2=0;

for(i=l,j=0;i<h;i++)

{

if(s[i]==‘ ‘&&e1==0)

{

E[0].s[j++]=s[i];

e1=1;

}

else if(s[i]!=‘ ‘)

{

E[0].s[j++]=s[i];

e1=0;

}

}

l=0;

while(ss[0][l]==‘ ‘)l++;

while(ss[0][h1-1]==‘ ‘)h1--;

e1=0,e2=0;

for(i=l,j=0;i<h1;i++)

{

if(ss[0][i]==‘ ‘&&e1==0)

{

E[1].s[j++]=ss[0][i];

e1=1;

}

else if(ss[0][i]!=‘ ‘)

{

E[1].s[j++]=ss[0][i];

e1=0;

}

}

l=0;

while(ss[1][l]==‘ ‘)l++;

while(ss[1][h2-1]==‘ ‘)h2--;

e1=0,e2=0;

for(i=l,j=0;i<h2;i++)

{

if(ss[1][i]==‘ ‘&&e1==0)

{

E[2].s[j++]=ss[1][i];

e1=1;

}

else if(ss[1][i]!=‘ ‘)

{

E[2].s[j++]=ss[1][i];

e1=0;

}

}

l=0;

while(ss[2][l]==‘ ‘)l++;

while(ss[2][h3-1]==‘ ‘)h3--;

e1=0,e2=0;

for(i=l,j=0;i<h3;i++)

{

if(ss[2][i]==‘ ‘&&e1==0)

{

E[3].s[j++]=ss[2][i];

e1=1;

}

else if(ss[2][i]!=‘ ‘)

{

E[3].s[j++]=ss[2][i];

e1=0;

}

}

H[0]=h,H[1]=h1,H[2]=h2,H[3]=h3;

}

int main()

{

int T,t,i,j,flag,l;

char c[10000];

scanf("%d",&T);

for(t=1;t<=T;t++)

{

scanf("%d",&n);

memset(mail,0,sizeof(mail));

memset(mode,0,sizeof(mode));

for(i=0;i<n;i++)

{

scanf("%s",mail[i]);

for(j=0;j<n;j++)

{

if(mail[i][j]==‘.‘)

mail[i][j]=‘ ‘;

}

}

for(i=0;i<n;i++)

scanf("%s",mode[i]);

take();

map<string,int>mp;

mp.clear();

scanf("%d",&m);

for(i=0;i<m;i++)

{

scanf("%s",c);

mp[c]=1;

}

sort(E,E+4,cmp);

flag=-1;

for(i=0;i<4;i++)

{

memset(c,0,sizeof(c));

l=0;

for(j=0;j<H[i];j++)

{

if(E[i].s[j]==‘ ‘)

{

if(!mp[c])break;

memset(c,0,sizeof(c));

l=0;

}

else if(j==H[i]-1)

{

c[l++]=E[i].s[j];

if(!mp[c])break;

flag=i;

}

else if(E[i].s[j]!=‘ ‘)

{

c[l++]=E[i].s[j];

}

}

if(flag!=-1)break;

}

printf("Case #%d: ",t);

if(flag==-1)

printf("FAIL TO DECRYPT\n");

else

printf("%s\n",E[flag].s);

}

return 0;

}

hdu 4119 Isabella's Message【字符串模拟】

时间: 2024-10-27 04:00:30

hdu 4119 Isabella's Message【字符串模拟】的相关文章

hdu 4119 Isabella&#39;s Message 模拟题

Isabella's Message Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4119 Description Isabella and Steve are very good friends, and they often write letters to each other. They exchange funny experiences, talk ab

hdu 4119 Isabella&#39;s Message 【字符串处理】

Isabella's Message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2098    Accepted Submission(s): 614 Problem Description Isabella and Steve are very good friends, and they often write letters

HDU 4119 Isabella&#39;s Message (2011年成都赛区现场赛I题)

1.题目描述:点击打开链接 2.解题思路:本题是一道模拟题,要求模拟一个解密的过程,练习这么久第一次做模拟题1Y了,内心还是很激动的~.只需要根据题意,记录* 所在的位置即可,然后每次都是先解密,后顺时针旋转90度.把每次解密的信息放到一个vector里,接下来就是连接它们,得到解密后的字符串,在map中查找这些单词是否存在即可.如果都存在,就把这条解密信息放到ans中,最后对ans排序,输出ans[0]就是答案. 3.代码: //#pragma comment(linker, "/STACK:

HDU - 4119 Isabella&#39;s Message

Description Isabella and Steve are very good friends, and they often write letters to each other. They exchange funny experiences, talk about people around, share their feelings and write about almost everything through the letters. When the letters

hdu 4300 Clairewd’s message 字符串哈希

Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10376    Accepted Submission(s): 3709 Problem Description Clairewd is a member of FBI. After several years concealing in BUPT,

2014多校第三场1005 || HDU 4891 The Great Pan(模拟)

题目链接 题意 : 给你n行字符串,问你有多少种理解方式.有两大类的理解 (1){A|B|C|D|...}代表着理解方式可以是A,可以是B或C或者D. (2)$blah blah$,在$$这两个符号中间,如果是不连续的空格的那个位置就有2种理解方式,可以理解为没有空格也可以理解为有空格.如果有连续N个空格的位置,那里就有N+1种理解方式. 最后所有的理解方式相乘,数据保证$一定与$匹配,{一定与匹配},不会有任何嵌套,类似{$$}或者{{}}或者${}$这种情况都不会出现,也不会有{$}这种情况

HDU 4300 Clairewd&#39;s message ( 拓展KMP )

题意 : 给你一个包含26个小写字母的明文密文转换信息字符串str,第一个表示'a'对应的密文是str[0].'b'对应str[1]--以此类推.接下来一行给你一个另一个字符串,这个字符串由密文+明文组成,但是现在后面部分的明问可能有不完整的情况(也有可能缺失只包含密文),问你现在最少需要补充多多少个字符串才能使得字符串变成完整的满足==>密文+密文对应的明文 组成的字符串,将这个完整的字符串输出出来. 分析 : 冷静分析一下可以发现,在给出的残缺字符串中,前面的一半肯定是属于密文的!如果不是这

HDU 4300 Clairewd‘s message 拓展KMP入门

HDU 4300 Clairewd's message 拓展KMP入门 题意 原题链接 这个题关键是要读懂题意,我做的时候就没有读懂,泪.题意是说给你的一个两个字符串,一个是26个字母密码表,依次对应替换的字母.然后给你一个字符串,这个字符串是不完整的(完整的应该是前半部分是加密的,后半部分是解密了的),然而,给你的字符串一定是加密的部分+一部分解密的部分(可以是全部,也可以是没有),让你求出最短的完整字符串,包括密文和明文: 解题思路 考虑给出的字符串S加密部分一定全部给出,所以给出的字符串的

hdu 5640 King&#39;s Cake(模拟)

Problem Description It is the king's birthday before the military parade . The ministers prepared a rectangle cake of size n×m(1≤n,m≤10000) . The king plans to cut the cake himself. But he has a strange habit of cutting cakes. Each time, he will cut