思路

题目链接

题意:题目中先给了一个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;
}
}

【Isabella Message】 【SPOJ - ISAB】【模拟】【矩阵的旋转】的更多相关文章

  1. Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)

    Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作) 题目描述 在MATLAB中,reshape是一个非常有用的函数,它可以将矩阵变为另一种形状且保持数据 ...

  2. N*N矩阵的旋转 不开辟新空间

    /* N*N矩阵的旋转 不开辟新空间 programmer:qpz time:2014-11-09 */ #include <iostream> using namespace std; ...

  3. 2018.10.02 NOIP模拟 矩阵分组(二分答案)

    传送门 考场上并不会写二分的check函数,下来看了看题解发现真是妙极. 不难想到每次直接从四个角各按阶梯状拓展出合法区域A,再检验B是否合法就行了.(然而考场上写的弃疗了) 于是题解用了一些小技巧优 ...

  4. [luoguP2129] L国的战斗续之多路出击(模拟 || 矩阵)

    传送门 1.模拟 easy #include <cstdio> #define N 500001 int n, m; int X[N], Y[N], x[N], y[N], a = 1, ...

  5. LeetCode48, 如何让矩阵原地旋转90度

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第29篇,我们来看一道简单的矩阵旋转问题. 题意 题目的要求很简单,给定一个二维方形矩阵,要求返回矩阵旋转90度之后的 ...

  6. POJ 2246 Matrix Chain Multiplication(结构体+栈+模拟+矩阵相乘)

    题意:给出矩阵相乘的表达式,让你计算需要的相乘次数,如果不能相乘,则输出error. 思路: 参考的网站连接:http://blog.csdn.net/wangjian8006/article/det ...

  7. POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀数组 倍增)

    题目链接 POJ2774 SPOJ1811 LCS - Longest Common Substring 比后缀自动机慢好多(废话→_→). \(Description\) 求两个字符串最长公共子串 ...

  8. POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀自动机)

    题目链接 POJ2774 SPOJ1811 LCS - Longest Common Substring 确实比后缀数组快多了(废话→_→). \(Description\) 求两个字符串最长公共子串 ...

  9. SPOJ:Fibonacci Polynomial(矩阵递推&前缀和)

    Problem description. The Fibonacci numbers defined as f(n) = f(n-1) + f(n-2) where f0 = 0 and f1 = 1 ...

随机推荐

  1. Bzoj 2525 [Poi2011]Dynamite

    2525: [Poi2011]Dynamite Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 240  Solved: 120[Submit][Sta ...

  2. jekyll搭建个人博客1

    目录 配置环境 使用模板 配置环境 简介 jekyll是一个简单的免费的,生成静态网页的工具,不需要数据库支持.但是可以配合第三方服务,例如Disqus.最关键的是jekyll可以免费部署在Githu ...

  3. mac 部署安装接口自动化持续集成 jmeter+ant+jenkins

    由于前段时间刚换的工作,公司用的是mac电脑办公,之前办公都是windows系统.刚开始使用时连基本的操作都要去找度娘,很不习惯,新电脑开始就是安装相关的工作工具 下面就说说遇到的哪些坑. 1.  m ...

  4. CSingleLock

    CSingleLock通常和CCriticalSection配合使用.总结这种用法

  5. 个人永久性免费-Excel催化剂功能第62波-单元格区域内数据加解密处理,最有效地保护数据方式

    Excel的数据保护能力有限,诸如之前提及过的工作表保护.工作薄保护等,都是十分微弱的保护措施,而对于强保护的工作薄打开密码来说,它像是个总开关一样,要么全不能看,要么就全看到.有这样的场景需求,一份 ...

  6. Error:(949) Multiple substitutions specified in non-positional format; Android格式化string.xml

    string.xml问题代码 <string name="msg">书名:%s\n价格:%d</string> 异常信息 Error:(949) Multi ...

  7. Kafka集群部署以及使用

    Kafka集群部署 部署步骤 hadoop102 hadoop103 hadoop104 zk zk zk kafka kafka kafka http://kafka.apache.org/down ...

  8. 【原创】用事实说话,Firefox 的性能是 Chrome 的 2 倍,Edge 的 4 倍,IE11 的 6 倍!

    前言 每个浏览器新版本发布,都号称性能有显著提升,并且市面有各种测试工具,测试结果也是大相径庭,比如下面这篇文章: https://www.oschina.net/news/97924/browser ...

  9. 上传及下载github项目

    1.上传本地项目 git init //把这个目录变成Git可以管理的仓库         git add README.md //文件添加到仓库         git add . //不但可以跟单 ...

  10. javascript获取指定区间范围随机数

    //获取指定区间范围随机数,包括lowerValue和upperValuefunction randomFrom(lowerValue,upperValue){    return Math.floo ...