25:螺旋加密
来源:互联网 发布:计算机 知乎 编辑:程序博客网 时间:2024/05/23 09:57
原题链接
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
Chip和Dale发明了一种文本信息加密技术。他们事先秘密约定好矩阵的行数和列数。接着,将字符按如下方式编码:
1. 所有文本只包含大写字母和空格。
2. 每个字符均赋予一个数值:空格=0,A=1,B=2,……,Y=25,Z=26。
按照下图所示的方式,将每个字符对应数值的5位二进制数依次填入矩阵。最后用0将矩阵补充完整。例如,对于信息“ACM”,行列数均为4时,矩阵将被填充为:
将矩阵中的数字按行连起来形成数字串,完成加密。例子中的信息最终会被加密为:0000110100101100。
- 输入
- 一行。首先是两个整数R(1≤R≤20)和C(1≤C≤20),表示行数和列数。之后是一个只包含大写字母和空格的字符串。字符串的长度≤(R*C)/5。R和C之间以及C和字符串之间均用单个空格隔开。
- 输出
- 一行,为加密后的二进制串。注意你可能需要用0将矩阵补充完整。
- 样例输入
4 4 ACM
- 样例输出
0000110100101100
源码
#include <iostream>#include <cstring>using namespace std;string table[27]={"00000","00001","00010","00011","00100", "00101","00110","00111","01000","01001","01010","01011", "01100","01101","01110","01111","10000","10001","10010", "10011","10100","10101","10110","10111","11000","11001","11010"};int get(string str, int index){ if (index >= str.size()*5) return 0; // 余位补0 string code; int i = index / 5; if (str[i] == ' ') return 0; code = table[str[i]-'A'+1]; int j = index % 5; return (int)(code[j]-'0');}int main(){ // 右下左上四个方向的变化 int step[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; int row, col, A[20][20]={0}, B[20][20]={0}, i, j, k, size; int x, y, direction=0; cin >> row >> col; size = row * col; string str; getchar(); // 消耗掉一个空格 getline(cin, str); i = j = 0; for (k=0; k<size; k++){ A[i][j] = get(str, k); B[i][j] = 1; // 已经走过 x = i + step[direction][0]; y = j + step[direction][1]; if (x<0||x>=row||y<0||y>=col||B[x][y]) direction = (direction+1)%4; i += step[direction][0]; j += step[direction][1]; } for (i=0; i<row; i++) for (j=0; j<col; j++) cout << A[i][j]; cout << endl; return 0;}
阅读全文
1 0
- 25:螺旋加密
- Openjudge 1.8 25:螺旋加密
- 百练3421,noi 25:螺旋加密
- 二维数组练习25_螺旋加密
- Openjudge 螺旋加密
- 25:螺旋加密(1.8编程基础之多维数组)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- PAT螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 1050. 螺旋矩阵(25)
- 如何定义一个只能在堆(栈)上创建对象的类
- [codevs1099]字串变换 双向BFS
- java基础:文件遍历以及通过RandomAccessFile对文件进行随机访问
- Android自定义View之绘制基础
- VirtualBox 在Linux 下安装增强功能
- 25:螺旋加密
- c++ 学习备忘录
- Python-OpenCV学习笔记(一):基础知识汇总
- selenium+Python学习之调用webdriver接口方法来打开和关闭Chrome浏览器
- PG(HGDB)删除数据库时不能有任何连接,否则删除失败
- poj Collecting Bugs (期望dp)
- 电路的优化
- anaconda下的opencv安装
- HTTP Status 500