百度之星2015资格赛 列变位法解密
列变位法解密
列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文。
比如:
原文:123456789
密钥:4
变换后的矩阵:
1234
5678
9xxx
(最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同)
密文:159263748
再比如:
原文:Hello, welcome to my dream world!
密钥:7
变换后的矩阵:
Hello,
welcome
to my
dream w
orld!xx
密文:
Hw doeetrrlloellc adoomm!,my e w
实现一个利用列变位法的加密器对Bob来说轻而易举,可是,对Bob来说,想清楚如何写一个相应的解密器似乎有点困难,你能帮帮他吗?
第一行一个整数TT,表示TT组数据。
每组数据包含22行
第一行,一个字符串s(1 \leq |s| \leq 1e5)s(1≤∣s∣≤1e5),表示经过列变位法加密后的密文
第二行,一个整数K(1 \leq K \leq |s|)K(1≤K≤∣s∣),表示原文在使用列变位法加密时的密钥
输入保证密文字符串中只含有ASCII码在[0x20,0x7F)[0x20,0x7F)范围内的字符
对于每组数据,先输出一行
Case #i:
然后输出一行,包含一个字符串s_decrypt,表示解密后得到的明文
4 159263748 4 Hw doeetrrlloellc adoomm!,my e w 7 Toodming is best 16 sokaisan 1
Case #1: 123456789 Case #2: Hello, welcome to my dream world! Case #3: Toodming is best Case #4: sokaisan
一道简单的模拟题,处理起来还不算太简单,另外在读入时注意用getchar(),用scanf很有可能会超时
#include <cstdio>
#include <cstring>
const int maxn = 100000+2;
char str[maxn],s[maxn];
int a[maxn];
int main()
{int T,t=1;scanf("%d",&T);while(T--){getchar();int n,len=0;while(1){str[len] = getchar();len++;if(str[len-1] == '\n') break;}len -= 1;scanf("%d",&n);int Mod = len%n;int length = len/n;int tot = 0;int tmp = Mod,x = 0;//printf("%d %d\n",tmp,len);for(int i=0; i<n; i++){a[i] = x;if(tmp){x += length+1;tmp--;}else x += length;}//for(int i=0; i<n; i++) printf("%d ",a[i]);for(int i=0; i<length; i++)for(int j=0; j<n; j++)s[tot++] = str[a[j]+i];for(int i=0; i<Mod; i++)s[tot++] = str[a[i]+length];s[tot] = '\0';printf("Case #%d:\n%s\n",t++,s);}
}
百度之星2015资格赛 列变位法解密相关推荐
- 百度之星 2015资格赛 列变位法解密【字符串】
列变位法解密 Accepts: 335 Submissions: 1017 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- 百度之星1002——模拟——列变位法解密
Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置 ...
- 字符串处理 2015百度之星资格赛 1002 列变位法解密
题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 另外:感觉麻烦的地方应该纸上写写就清楚了 5 */ 6 ...
- 2015年百度之星程序设计大赛 - 资格赛:1002列变位法解密
列变位法解密 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem De ...
- 字符串处理 百度之星资格赛 1002 列变位法解密
题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 */ 5 #include <cstdio> ...
- 2015百度之星 列变位法解密
列变位法解密 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...
- 列变位法解密--百度之星B题
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1002 关于百度之星的晋级规则说明 列变位法 ...
- 列变位法解密-2016百度之星 - 测试赛(热身,陈题)
列变位法解密 Accepts: 296 Submissions: 904 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- 列变位法解密(2016百度之星 - 测试赛(热身,陈题))
列变位法解密 Accepts: 132 Submissions: 351 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
最新文章
- ibatis源码浅析- 初探
- 浅谈Socket编程
- 华为最新系统鸿蒙的意思,EMUI官微正式更名为HarmonyOS!华为鸿蒙系统的推出有何意义?...
- uva 1610——Party Games
- 计算鞍点(信息学奥赛一本通-T1122)
- Android控件Gallery3D效果 .
- Spark 部署及示例代码讲解
- java判断一个文件有多少行_Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)...
- MYSQL 用户及权限管理
- python根据excel数据生成柱状图并导出成图片格式
- AI人工智能282G教学视频+PPT
- 【概率论与数理统计】猴博士 笔记 p24-25 条件概率密度函数、求两个随机变量形成的函数的分布
- 腾讯汤道生:安全是产业数字化的底座
- 名帖04 李阳冰 篆书《城隍庙碑》
- 实习日志 (2021.09.13)
- 卡方分布、F分布、t分布和正态分布的关系
- Mencoder转换视频
- Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
- SAP S/4HANA生产订单的BAdI增强点之Initialize方法
- STM32F103学习笔记——SPI读写Flash(二)