列变位法解密
 Accepts: 335
 Submissions: 1017

 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
Copy

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

题意:

给出一种加密的方式,现在给出密文以及加密的密钥,让你破解出原始数据

题解:

见到题的第一反应就是先手动模拟把这个过程逆推一下,后来发现,根本不行啊,如果创建二维字符数组的话, 先不说效率,数组的大小都难以进行控制

比如说,字符串长度100万,如果K 是1 那么第一维需要开到100万,如果k 是100万,第二维需要开到100万.......

只能换方法(如果用string或者vector,应该也是可以的)

不难发现,主要的任务是,找到经过所给的方式加密后,原下标和当前下标的对应关系,只要对应关系找到了,直接进行输出就可以了.....

对一个字符串进行了题目所述的加密方式时,有可能有的列比较短,已知长度和K,不难求出较短行和较长行的个数,然后进行下标变换就行了,也就是对较短的和较长的列(加密之后就成了行),分别进行处理。

ps:

渣渣水平,调试了好一会,才过了样例,真心怀疑人生了...

不过AC的时候才明白:唉,又水了一道.....

/*
http://blog.csdn.net/liuke19950717
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1005;
char s[maxn*maxn];
int main()
{int t;//freopen("shuju.txt","r",stdin);scanf("%d",&t);for(int kase=1;kase<=t;++kase){getchar();printf("Case #%d:\n",kase);gets(s);int k;scanf("%d",&k);int len=strlen(s);int x=len/k,y=len%k;//行数和余数int base=x; //记录最小的行数if(y)//有不足的行 {++x;//最大的行数}int cnt=0;//总个数for(int i=0;i<x&&cnt<len;++i)//x行 {for(int j=0;j<k&&cnt<len;++j){int a=j,b=0;//初始值if(j>y)//如果到了有空缺的行{a=y;b=j-y;}printf("%c",s[a*x+b*base+i]);//这个地址变换还是很好想的....++cnt;}}printf("\n");}return 0;
}

百度之星 2015资格赛 列变位法解密【字符串】相关推荐

  1. 百度之星2015资格赛 列变位法解密

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

  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. python同时同步发送多个请求_python如何实现“发送一个请求,等待多个响应”的同步?...
  2. 两台oracle怎样定期导表数据,定期从Oracle导数据至MySQL
  3. Win 2008 R2安装SQL Server 2008“性能计数器注册表配置单元一致性”失败的解决办法...
  4. 13.  Roman to Integer
  5. 网站改title的后果到底有多惨?
  6. 轻松理解条件随机场(CRF)
  7. 汉字笔顺口诀_一帮40后理工男编出新型字典,《笔顺码字典》在汉首发
  8. 17秋 SDN课程 第五次上机作业
  9. [转]Angular: Hide Navbar Menu from Login page
  10. 项目实战中的防御性编程
  11. rmt_redis.c:6446 ERROR: Can't handle RDB format version redis-migrate-tool迁移工具报错
  12. 计算机二级1px等于多少厘米,px和pt换算(1px等于多少pt)
  13. ABB机器人紧凑型控制柜内部结构(图)
  14. android 刷recovery,安卓手机怎么刷入Recovery 命令行刷入Recovery教程
  15. 如何修改PDF文件,怎样将PDF文件拆分
  16. 基于安卓的高清语音技术亮相中国国际通信展览会
  17. 记一次 nginx的rewrite和proxy_pass操作
  18. 学历真的是衡量一个人的首要条件吗?
  19. Java代码实现点赞功能
  20. 【推文】人间清醒VS梅花痣俏郎君

热门文章

  1. 安装应用需要打开未知来源权限_OPPO手机未知来源权限在哪 OPPO手机未知来源权限设置方法...
  2. “2018活水计划”首次调研启动,国内外产学研实现共振
  3. 韩国 naver web网页版第三方登录 naver网页登录
  4. 股市非常态,CCI指标买卖点实例图解
  5. 东北大学5月校赛c题
  6. 圈粉年轻人的“机票盲盒”,爆款的逻辑是什么?
  7. MySQL 的数据备份与恢复
  8. 产业护航 湾区共振!11月30日飞桨携手生态伙伴带来企业智能化升级的新思路...
  9. vue2.0 渲染列表在苹果手机加载不出来的问题
  10. 扔鸡蛋问题(四种解法)