列变位法解密

 Accepts: 132
 Submissions: 351
 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

Statistic | Submit | Clarifications | Back

前两次为了节省点内存SB了。。。浪费了时间 结果TLE

#include <stdio.h>
#include <string.h>
char pass[100000+10];
char str[200000+10];
bool vis[200000+10];
int main()
{int ncase,t=1;scanf("%d",&ncase);while(ncase--){int n,len,m;memset(vis,false,sizeof(vis));gets(pass);gets(pass);scanf("%d",&n);    len=strlen(pass);if(len%n==0){m=len/n;}else{m=len/n+1;}int r=m*n-len;int len2=m*n;int temp=r;int j=len-1;for(int i=len2;i>0;i--){if(i%m==0&&temp){temp--;vis[i]=true;}elsestr[i]=pass[j--];}printf("Case #%d:\n",t++);for(int k=1;k<=m;k++){for(int i=k;i<=len2;i+=m){if(!vis[i])printf("%c",str[i]);}}    printf("\n");}
}

列变位法解密(2016百度之星 - 测试赛(热身,陈题))相关推荐

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

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

  2. 2016百度之星 - 测试赛(热身,陈题) 列变位法解密IP聚合放盘子

    第一题还没看懂题意:等以后懂了再补吧. 列变位法解密  Accepts: 395  Submissions: 1308  Time Limit: 2000/1000 MS (Java/Others) ...

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

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

  4. 2016百度之星 - 测试赛 1002 列变位法解密 (模拟)

    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=695&pid=1002 列变位法解密  Accep ...

  5. 2016“百度之星”-测试赛

    1大搬家 Problem Description 近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上.指示的内容是坐在位置i上的人要搬到位置j上.现在B厂有N个人,一对一到N个位置上.搬家之 ...

  6. 2016百度之星 - 测试赛(热身,陈题)1001,1002,1003,1004

    1001.大搬家  Accepts: 515  Submissions: 2005  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 655 ...

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

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

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

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

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

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

最新文章

  1. JSP笔记-发送邮件
  2. jacobi迭代法matlab_解线性方程组的经典迭代法(1)-理论
  3. c++ static关键字的作用
  4. 一个memset函数使用时的坑
  5. python编写linux巡检脚本_python结合shell脚本实现简单的日常集中巡检
  6. 单片机c语言直接寻址 间接寻址,pic单片机教程之数据存储器的直接间接寻址方式...
  7. 技嘉ide模式怎么改_技嘉主板bios设置ide
  8. 格物致知诚意正心修身齐家治国平天下是什么意思【转载】
  9. win10远程桌面_怎么选择Win10系统版本?家庭版与专业版的对比介绍
  10. 页面跳转的两种方式(转发和重定向)区别详解:
  11. Windows10系统修复方法
  12. python面向对象编程
  13. 【闲趣】你的父母有哪些神操作?
  14. python大赛对名_团队作业1——团队展示选题
  15. Python×cmd:教你装X
  16. Linux创建用户,用户切换,权限相关实验
  17. CVPR 2021 论文解读I 动态区域感知卷积,进一步提升分类/检测/分割性能|Dynamic Region-Aware Convolution
  18. 【大话算法导论】从SAT规约到3SAT
  19. DFIG虚拟惯性控制+下垂控制的系统一次调频的simulink模型
  20. 安卓视频播放器 一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定,仿今日头条 Android视频播放器

热门文章

  1. AlphaFold2源码解析(4)--模型架构
  2. 安卓以太网共享4G网络方法
  3. python绝对方向角度值_哪个选项是turtle绘图中角度坐标系的绝对0度方向?
  4. Rocky和ChatGPT谈笑风生的日子 |【AI行研商业价值分析】
  5. 周大福向北京体育大学教育基金会捐赠1.2亿元设立“郑家纯冠军培养基金”
  6. core控制器属性注入的用处_.NET Core原生DI扩展之属性注入实现
  7. 过河问题----贪心
  8. 模拟弹子台球--java多线程应用
  9. 这个夏天:应用试客已将积分墙逼到墙角,ASO路上的那些掮客
  10. 登录webqq得金山快盘空间5G