【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 ...
随机推荐
- webpack-dev-server 小记 原理介绍 概念解读
使用 DevServer 提供 HTTP 服务而不是使用本地文件预览 监听文件的变化并自动刷新网页,做到实时预览 支持 Source Map,以方便调试 对于这些,Webpack 都为我们考虑好了.W ...
- 多线程总结-同步之ReentrantLock
目录 1 ReentrantLock与synchronized对比 2.示例用法 2.1 基本用法 2.2 尝试锁 2.3 可打断 2.4 公平锁 1 ReentrantLock与synchroniz ...
- Noip 2016 天天爱跑步 题解
[NOIP2016]天天爱跑步 时间限制:2 s 内存限制:512 MB [题目描述] 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是 ...
- ServiceFabric极简文档-4.1 学习路线图
Service Fabric学习路线图 原文地址:Service Fabric学习路线图
- 一次线上遇到磁盘IO瓶颈的问题处理
Load average %wa 的含义是等待输入输出的CPU时间百分比 结合iostat命令可以发现磁盘已经在100%满负荷在跑 await:每一个IO请求的处理的平均时间(单位是毫秒).这 ...
- py+appium微信公众号自动化(已搞定多个坑)
最近需要做微信公众号的自动化测试,遇到了不少坑. 微信公众号自动化与app自动化还是有区别的,因为多了不少坑.打开微信x5内核调试的就不说了,百度有. 1.首先,微信公众号有webview,uiaut ...
- Cocos2d-x 3.x 学习笔记(三):Scheduler Timer 调度与定时
1. 概述 Cocos2d-x 的 Scheduler 离不开 Timer.Timer 类是定时器,用来规定一个回调函数应该在何时被触发.Timer 封装了已运行时间.重复次数.已执行次数.延迟秒数 ...
- 万能RecyclerView的数据适配器BaseRecyclerViewAdapterHelper
今天楼主才发现github上有这么一个好用的开源代码,充满好奇心的楼主马上使用了,特地分享给大家. 此项目的github地址: https://github.com/CymChad/BaseRecyc ...
- 前端框架——树形结构Ztree的使用
地址 官网:http://ztree.me 码云:https://gitee.com/zTree/zTree_v3 可以实现效果 使用方式 下载资源文件,引入到自己的项目中 <head> ...
- 微信小程序设计总结
微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 小程序提供了一个简单.高效的应用开发框架和丰富的组件及API,帮助开发者在微信中开发具有原生 A ...