zoukankan      html  css  js  c++  java
  • 【Isabella Message】 【SPOJ

    思路

    题目链接
    题意:题目中先给了一个N阶矩阵样子的字符,后给了一个mask,然后又给出你应该认识的一些单词,最后是让你输出最终字典序最小的一句话。
    思路:根据题目要求模拟即可。这里会用到stringstream,学习一下。不过个人觉得比较重要的是矩阵旋转部分,下面附这一块的代码。

    void zhuan()
    {
        char temp[maxn][maxn];
        memset(temp, 0, sizeof(temp));		//临时数组
        for(int i = 0; i < N; i++)
        {
            for(int j = 0; j < N; j++)
            {
                temp[i][j] = mask[N-j-1][i];			//这一块当成结论记住吧
            }
        }
        for(int i = 0; i < N; i++)
            for(int j = 0; j < N; j++)
                mask[i][j] = temp[i][j];
    }
    

    AC代码

    #include<bits/stdc++.h>
    #include<cstdio>
    #include<cstring>
    #include<sstream>
    using namespace std;
    int T, N, M;
    const int maxn = 50 + 10;
    char s[maxn][maxn], mask[maxn][maxn];
    string words[maxn*2];
    map<string, int> word;
    vector<string> standard;
    void zhuan()
    {
        char temp[maxn][maxn];
        memset(temp, 0, sizeof(temp));
        for(int i = 0; i < N; i++)
        {
            for(int j = 0; j < N; j++)
            {
                temp[i][j] = mask[N-j-1][i];
            }
        }
        for(int i = 0; i < N; i++)
            for(int j = 0; j < N; j++)
                mask[i][j] = temp[i][j];
    }
    int main()
    {
    //    freopen("input.txt", "r", stdin);
    //    freopen("output.txt", "w", stdout);
        cin >> T;
        for(int t = 1; t <= T; t++)
        {
            memset(s, 0, sizeof(s));
            memset(mask, 0, sizeof(mask));
            cin >> N;
            for(int i = 0; i < N; i++)
                scanf("%s", s[i]);
            for(int i = 0; i < N; i++)
                scanf("%s", mask[i]);
            cin >> M;
            word.clear();
            for(int i = 0; i < M; i++)
            {
                cin >> words[i];
                word[words[i]] = 1;
            }
            standard.clear();
    
            string tmmp[4];
            for(int ans = 0; ans < 4; ans++)
            {
                tmmp[ans] = "";
                for(int i = 0; i < N; i++)
                {
                    for(int j = 0; j < N; j++)
                    {
                        if(mask[i][j] == '*')
                        {
                            if(s[i][j] != '.')
                                tmmp[ans] += s[i][j];
                            else
                                tmmp[ans] += " ";
                        }
                    }
                }
                zhuan();
            }
            string tmp[4];
            tmp[0] = tmmp[0] + tmmp[1] + tmmp[2] + tmmp[3];
            tmp[1] = tmmp[1] + tmmp[2] + tmmp[3] + tmmp[0];
            tmp[2] = tmmp[2] + tmmp[3] + tmmp[0] + tmmp[1];
            tmp[3] = tmmp[3] + tmmp[0] + tmmp[1] + tmmp[2];
            for(int ans = 0; ans < 4; ans++)
            {
                int _front = 0, _back = tmp[ans].size();
                for(int i = 0; i < tmp[ans].size(); i++)
                {
                    if(tmp[ans][i] == ' ')
                        _front++;
                    else
                        break;
                }
                for(int j = tmp[ans].size() - 1; j >= 0; j--)
                {
                    if(tmp[ans][j] == ' ')
                        --_back;
                    else
                        break;
                }
                string temp = "";
                for(int i = _front; i < _back; i++)
                    temp += tmp[ans][i];
                //cout << "temp =" << temp << "\" << endl;
                string table[maxn*2];
                stringstream ss(temp);
                int cnt = 0;
                while(ss >> table[cnt])
                {
                    cnt++;
                }
                int flag = 0;
                for(int i = 0; i < cnt; i++)
                {
                    if(word[table[i]])
                        continue;
                    else
                    {
                        flag = 1;
                        break;
                    }
                }
                if(!flag)
                    standard.push_back(temp);
            }
            if(!standard.empty())
            {
                sort(standard.begin(), standard.end());
                cout << "Case #" << t << ": " << standard[0] << endl;
            }
            else
                cout << "Case #" << t << ": " << "FAIL TO DECRYPT" << endl;
        }
    }
    
  • 相关阅读:
    js完美拖拽封装及其案例
    js运动框架封装以及两种案例
    js常见的11种兼容
    Lua 学习笔记(五)函数
    Lua 学习笔记(四)语句与控制结构
    Lua 学习笔记(三)表达式
    Lua 学习笔记(二)语法、类型、值
    Lua 学习笔记(一)环境搭建
    Cocos2d-x 3.2 学习笔记(十六)保卫萝卜 游戏主循环与定时器
    Cocos2d-x 3.2 学习笔记(十五)保卫萝卜 场景与数据
  • 原文地址:https://www.cnblogs.com/KeepZ/p/11372084.html
Copyright © 2011-2022 走看看