列变位法解密

 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)

Problem Description

列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如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来说,想清楚如何写一个相应的解密器似乎有点困难,你能帮帮他吗?

Input

第一行一个整数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)范围内的字符

Output

对于每组数据,先输出一行

Case #i:

然后输出一行,包含一个字符串s_decrypt,表示解密后得到的明文

Sample Input
4
159263748
4
Hw doeetrrlloellc adoomm!,my  e w
7
Toodming is best
16
sokaisan
1

Sample Output
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资格赛 列变位法解密相关推荐

  1. 百度之星 2015资格赛 列变位法解密【字符串】

    列变位法解密  Accepts: 335  Submissions: 1017  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536 ...

  2. 百度之星1002——模拟——列变位法解密

    Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置 ...

  3. 字符串处理 2015百度之星资格赛 1002 列变位法解密

    题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 另外:感觉麻烦的地方应该纸上写写就清楚了 5 */ 6 ...

  4. 2015年百度之星程序设计大赛 - 资格赛:1002列变位法解密

    列变位法解密  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536/65536 K (Java/Others) Problem De ...

  5. 字符串处理 百度之星资格赛 1002 列变位法解密

    题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 */ 5 #include <cstdio> ...

  6. 2015百度之星 列变位法解密

    列变位法解密 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...

  7. 列变位法解密--百度之星B题

    http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1002 关于百度之星的晋级规则说明 列变位法 ...

  8. 列变位法解密-2016百度之星 - 测试赛(热身,陈题)

    列变位法解密  Accepts: 296  Submissions: 904  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536/ ...

  9. 列变位法解密(2016百度之星 - 测试赛(热身,陈题))

    列变位法解密  Accepts: 132  Submissions: 351  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536/ ...

最新文章

  1. ibatis源码浅析- 初探
  2. 浅谈Socket编程
  3. 华为最新系统鸿蒙的意思,EMUI官微正式更名为HarmonyOS!华为鸿蒙系统的推出有何意义?...
  4. uva 1610——Party Games
  5. 计算鞍点(信息学奥赛一本通-T1122)
  6. Android控件Gallery3D效果 .
  7. Spark 部署及示例代码讲解
  8. java判断一个文件有多少行_Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)...
  9. MYSQL 用户及权限管理
  10. python根据excel数据生成柱状图并导出成图片格式
  11. AI人工智能282G教学视频+PPT
  12. 【概率论与数理统计】猴博士 笔记 p24-25 条件概率密度函数、求两个随机变量形成的函数的分布
  13. 腾讯汤道生:安全是产业数字化的底座
  14. 名帖04 李阳冰 篆书《城隍庙碑》
  15. 实习日志 (2021.09.13)
  16. 卡方分布、F分布、t分布和正态分布的关系
  17. Mencoder转换视频
  18. Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
  19. SAP S/4HANA生产订单的BAdI增强点之Initialize方法
  20. STM32F103学习笔记——SPI读写Flash(二)

热门文章

  1. 车库咖啡参与投资拍摄的电影《当我们海阔天空》即将上映
  2. Windows编译chromium
  3. 这项AR技术将你活生生地“解剖”给别人看
  4. wordpress用户注册_如何在WordPress网站上允许用户注册
  5. 隐形降权是什么, 什么行为会导致店铺被隐形降权,如何避免降权
  6. java集合框架笔记
  7. puppet重申证书
  8. 团购的玩法 要粘性也要乐趣
  9. 2022年数据库审计产品排行榜-必看!
  10. 解决 Windows 11 记事本崩溃闪退