【Isabella Message】 【SPOJ - ISAB】【模拟】【矩阵的旋转】
思路
题目链接
题意:题目中先给了一个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】【模拟】【矩阵的旋转】的更多相关文章
- Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作) 题目描述 在MATLAB中,reshape是一个非常有用的函数,它可以将矩阵变为另一种形状且保持数据 ...
- N*N矩阵的旋转 不开辟新空间
/* N*N矩阵的旋转 不开辟新空间 programmer:qpz time:2014-11-09 */ #include <iostream> using namespace std; ...
- 2018.10.02 NOIP模拟 矩阵分组(二分答案)
传送门 考场上并不会写二分的check函数,下来看了看题解发现真是妙极. 不难想到每次直接从四个角各按阶梯状拓展出合法区域A,再检验B是否合法就行了.(然而考场上写的弃疗了) 于是题解用了一些小技巧优 ...
- [luoguP2129] L国的战斗续之多路出击(模拟 || 矩阵)
传送门 1.模拟 easy #include <cstdio> #define N 500001 int n, m; int X[N], Y[N], x[N], y[N], a = 1, ...
- LeetCode48, 如何让矩阵原地旋转90度
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第29篇,我们来看一道简单的矩阵旋转问题. 题意 题目的要求很简单,给定一个二维方形矩阵,要求返回矩阵旋转90度之后的 ...
- POJ 2246 Matrix Chain Multiplication(结构体+栈+模拟+矩阵相乘)
题意:给出矩阵相乘的表达式,让你计算需要的相乘次数,如果不能相乘,则输出error. 思路: 参考的网站连接:http://blog.csdn.net/wangjian8006/article/det ...
- POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀数组 倍增)
题目链接 POJ2774 SPOJ1811 LCS - Longest Common Substring 比后缀自动机慢好多(废话→_→). \(Description\) 求两个字符串最长公共子串 ...
- POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀自动机)
题目链接 POJ2774 SPOJ1811 LCS - Longest Common Substring 确实比后缀数组快多了(废话→_→). \(Description\) 求两个字符串最长公共子串 ...
- SPOJ:Fibonacci Polynomial(矩阵递推&前缀和)
Problem description. The Fibonacci numbers defined as f(n) = f(n-1) + f(n-2) where f0 = 0 and f1 = 1 ...
随机推荐
- python爬虫笔记之re.IGNORECASE
re.IGNORECASE有什么用?re.IGNORECASE是什么意思?(原谅我抓下seo..) 这里自己总结下: re.IGNORECASE是compile函数中的一个匹配模式. re.IGNOR ...
- <a>标签 IOS 安卓 亲测有效
一.普通链接 <a href="http://www.baidu.com">百度</a> 二.邮件链接 1.标签最简式 <a href="m ...
- 【CYH-02】NOIp考砸后虐题赛:坐标:题解
代码: 这道题也并不难,用排序+简单动规即可.因为@Kevin_Wa 大佬放的是c++,所以我来一发Pascal. var min,max,i,a1,b1,c1,d1,n:longint; a,b,c ...
- CF356E - Xenia and String Problem
也许更好的阅读体验 \(\mathcal{Description}\) 定义一种字符串\(gray\)串满足: 长度为奇数 正中间的字母只出现一次 左右两端相同,左右两端也是gray串 一个\(gra ...
- C#8.0 中使用默认接口成员更新接口
连载目录 [已更新最新开发文章,点击查看详细] 从 .NET Core 3.0 上的 C# 8.0 开始,可以在声明接口成员时定义实现. 最常见的方案是安全地将成员添加到已经由无数客户端发布并使 ...
- [leetcode] 22. Generate Parentheses(medium)
原题 思路: 利用DFS,搜索每一种情况,同时先加"("后加")",保证()匹配正确. 最近开始学习前端,尝试用js来写. const generate = f ...
- 小白学python-day05-IDE、格式化输出、For While循环、断点、continue、break
今天是day05,以下是学习总结. 但行努力,莫问前程. ----------------------------------------------------------------------- ...
- <<Modern CMake>> 翻译 2. CMake 基础
<<Modern CMake>> 翻译 2. CMake 基础 最低版本 这是每个 CMakeLists.txt 文件的第一行.CMakeLists.txt 是 CMake 所 ...
- k8s1.9.0安装--基础集群部署
二.基础集群部署 - kubernetes-simple 1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运 ...
- 【TensorFlow 3】mnist数据集:与Keras对比
在TF1.8之后Keras被当作为一个内置API:tf.keras. 并且之前的下载语句会报错. mnist = input_data.read_data_sets('MNIST_data',one_ ...