HDU 4119 Isabella's Message (2011年成都赛区现场赛I题)

1.题目描述:点击打开链接

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

3.代码:

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<bitset>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
using namespace std;

#define me(s)  memset(s,0,sizeof(s))
#define rep(i,n) for(int i=0;i<(n);i++)
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <int, int> P;

const int N=55;
char s[N][N];
vector<P>pos;
vector<string>mes;
map<string,int>words;
int n;

void rotate()//将每个方格旋转90度
{
    int len=pos.size();
    for(int i=0;i<len;i++)
    {
        int x=pos[i].first,y=pos[i].second;
        pos[i]=P(y,n-1-x);
    }
    sort(pos.begin(),pos.end());
}
void decrypt(int dir)//解密
{
    int len=pos.size();
    string tmp="";
    for(int i=0;i<len;i++)
    {
        int x=pos[i].first,y=pos[i].second;
        tmp+=(isalpha(s[x][y]))?s[x][y]:' ';
    }
    mes.push_back(tmp);
    rotate();
}

int main()
{
    int T;
    scanf("%d",&T);
    for(int kase=1;kase<=T;kase++)
    {
        scanf("%d",&n);
        me(s);
        pos.clear();mes.clear();words.clear();
        for(int i=0;i<n;i++)
            scanf("%s",s[i]);
        char tmp[N];
        for(int i=0;i<n;i++)
        {
            scanf("%s",tmp);
            for(int j=0;j<n;j++)
                if(tmp[j]=='*')
                pos.push_back(P(i,j));
        }
        int m;
        scanf("%d",&m);
        string tp;
        for(int i=0;i<m;i++)
          {
              cin>>tp;
              words[tp]=i;
          }
        printf("Case #%d: ",kase);
        for(int i=0;i<4;i++)
            decrypt(i);

        vector<string>ans;
        for(int i=0;i<4;i++)
        {
            string s=mes[i]+mes[(i+1)%4]+mes[(i+2)%4]+mes[(i+3)%4];//连接信息
            int p=0,st=0;
            string ts="",tc;
            stringstream ss(s);
            int first=1;
            int ok=1;
            while(ss>>tc)
            {
                if(!words.count(tc)){ok=0;break;}
                if(first)first=0;
                else ts+=' ';
                ts+=tc;
            }
            if(ok)ans.push_back(ts);//每个单词都找到了,存到ans中
        }
        if(!ans.empty())
        {
            sort(ans.begin(),ans.end());
            cout<<ans[0]<<endl;
        }
        else puts("FAIL TO DECRYPT");
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 4119 Isabella's Message (2011年成都赛区现场赛I题)

时间: 2024-12-20 20:28:59

HDU 4119 Isabella's Message (2011年成都赛区现场赛I题)的相关文章

HDU 4115 Eliminate the Conflict (2011年成都赛区现场赛E题)

1.题目描述:点击打开链接 2.解题思路:本题属于2-SAT问题,第一次做这种题,还是很感兴趣的.2-SAT解决的是给定m条语句,每一条语句形如"xi为真或xj为假",问你是否可能让所有的语句都成立.那么不难发现,本题就属于一种2-SAT问题. 首先,根据题意可知,第i轮有2种出法,要么是x[i],要么是(x[i]+1)%3.我们令xi为真表示出x[i],xi为假表示出(x[i]+1)%3.对于w==1的情况,我们要分2种情况讨论:当x[u]==x[v]时,表示第u轮出x[u],那么第

HDU 4422 The Little Girl who Picks Mushrooms (2012年成都赛区现场赛C题)

1.题目描述:点击打开链接 2.解题思路:本题是一道简单模拟题,然而,自己的方法不对WA了很多次==.最后不得不弃用自己的思路了.首先用-1表示还没有使用过的位置.可以每次枚举3个位置,如果发现这3个位置中没有-1且他们的和不能被1024整除,那么return 0,否则,找到没有被标记的另外2个位置,如果这2个位置其中一个为-1,那么直接返回1024,因为我们已经交了三个袋子了,剩下的袋子中如果又没有确定的,那么一定可以凑成1024.否则,计算这2个位置的和,然后看减去若干次1024后剩下多少,

hdu 4431 第37届ACM/ICPC 天津赛区现场赛A题 枚举

题意:就是给了13张牌.问增加哪些牌可以胡牌.m是数字,s是条,p是筒,c是数字 胡牌有以下几种情况: 1.一个对子 +  4组 3个相同的牌或者顺子.  只有m.s.p是可以构成顺子的.东西南北这样的牌没有顺子. 2.7个不同的对子. 3.1m,9m,1p,9p,1s,9s,1c,2c,3c,4c,5c,6c,7c.  这13种牌每种都有,而且仅有这13种牌.肯定是有一种2张.其他的1张. 模拟即可,第一个对子的情况需要枚举 很麻烦的模拟,但是貌似稳银的很需要这题,所以这种难度必须要弄懂,加油

hdu 4438 第37届ACM/ICPC 天津赛区现场赛H题

题意:Alice和Bob两个人去打猎,有两种(只)猎物老虎和狼: 杀死老虎得分x,狼得分y: 如果两个人都选择同样的猎物,则Alice得分的概率是p,则Bob得分的概率是(1-p): 但是Alice事先知道Bob先选老虎的概率是Q,问Alice得分的期望最大值是 求期望 如果先去打老虎,则会有bob先去打狼和bob去打老虎两种情况,期望相加则是alice去打老虎的期望,然后求打狼的期望,比较大小即可 1 #include<cstdio> 2 #include<iostream> 3

hdu 4119 Isabella&#39;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

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

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 4031 2011成都赛区网络赛A题 线段树 ***

就是不知道时间该怎么处理,想了好久,看了别人的题解发现原来是暴力,暴力也很巧妙啊,想不出来的那种  -_-! 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9