博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Isabella Message】 【SPOJ - ISAB】【HDU-4119】【模拟】【矩阵的旋转】
阅读量:4966 次
发布时间:2019-06-12

本文共 2687 字,大约阅读时间需要 8 分钟。

思路

题意:题目中先给了一个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
#include
#include
#include
using namespace std;int T, N, M;const int maxn = 50 + 10;char s[maxn][maxn], mask[maxn][maxn];string words[maxn*2];map
word;vector
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; }}

转载于:https://www.cnblogs.com/KeepZ/p/11372084.html

你可能感兴趣的文章
java中的合同打印_比较方法违反了Java 7中的一般合同
查看>>
php 位运算与权限,怎么在PHP中使用位运算对网站的权限进行管理
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>
wcdma下行如何解扩解扰 matlab,WCDMA技术基础.ppt
查看>>
mysql adddate()函数
查看>>
mysql 根据日期时间查询数据
查看>>
mysql sin() 函数
查看>>
mysql upper() 函数
查看>>
socket tcp
查看>>
DataMining--Python基础入门
查看>>
单片机复位电路
查看>>
php json_decode失败,返回null
查看>>
获取单选按钮选中的值
查看>>
oracle 分页
查看>>
助教学期总结
查看>>
绘制基本 图形之矩形与多边形
查看>>
3-day3-list-truple-map.py
查看>>
02: djangorestframework使用
查看>>
7zip 自解压安装程序
查看>>
Edit控件显示多行文字
查看>>