列变位法解密(2016百度之星 - 测试赛(热身,陈题))
列变位法解密
列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如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
前两次为了节省点内存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百度之星 - 测试赛(热身,陈题))相关推荐
- 列变位法解密-2016百度之星 - 测试赛(热身,陈题)
列变位法解密 Accepts: 296 Submissions: 904 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- 2016百度之星 - 测试赛(热身,陈题) 列变位法解密IP聚合放盘子
第一题还没看懂题意:等以后懂了再补吧. 列变位法解密 Accepts: 395 Submissions: 1308 Time Limit: 2000/1000 MS (Java/Others) ...
- 2016百度之星 - 测试赛(热身,陈题)-列变位法解密(模拟)
列变位法解密 Accepts: 152 Submissions: 418 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- 2016百度之星 - 测试赛 1002 列变位法解密 (模拟)
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=695&pid=1002 列变位法解密 Accep ...
- 2016“百度之星”-测试赛
1大搬家 Problem Description 近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上.指示的内容是坐在位置i上的人要搬到位置j上.现在B厂有N个人,一对一到N个位置上.搬家之 ...
- 2016百度之星 - 测试赛(热身,陈题)1001,1002,1003,1004
1001.大搬家 Accepts: 515 Submissions: 2005 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 655 ...
- 字符串处理 百度之星资格赛 1002 列变位法解密
题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 */ 5 #include <cstdio> ...
- 字符串处理 2015百度之星资格赛 1002 列变位法解密
题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 另外:感觉麻烦的地方应该纸上写写就清楚了 5 */ 6 ...
- 列变位法解密--百度之星B题
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1002 关于百度之星的晋级规则说明 列变位法 ...
最新文章
- JSP笔记-发送邮件
- jacobi迭代法matlab_解线性方程组的经典迭代法(1)-理论
- c++ static关键字的作用
- 一个memset函数使用时的坑
- python编写linux巡检脚本_python结合shell脚本实现简单的日常集中巡检
- 单片机c语言直接寻址 间接寻址,pic单片机教程之数据存储器的直接间接寻址方式...
- 技嘉ide模式怎么改_技嘉主板bios设置ide
- 格物致知诚意正心修身齐家治国平天下是什么意思【转载】
- win10远程桌面_怎么选择Win10系统版本?家庭版与专业版的对比介绍
- 页面跳转的两种方式(转发和重定向)区别详解:
- Windows10系统修复方法
- python面向对象编程
- 【闲趣】你的父母有哪些神操作?
- python大赛对名_团队作业1——团队展示选题
- Python×cmd:教你装X
- Linux创建用户,用户切换,权限相关实验
- CVPR 2021 论文解读I 动态区域感知卷积,进一步提升分类/检测/分割性能|Dynamic Region-Aware Convolution
- 【大话算法导论】从SAT规约到3SAT
- DFIG虚拟惯性控制+下垂控制的系统一次调频的simulink模型
- 安卓视频播放器 一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定,仿今日头条 Android视频播放器
热门文章
- AlphaFold2源码解析(4)--模型架构
- 安卓以太网共享4G网络方法
- python绝对方向角度值_哪个选项是turtle绘图中角度坐标系的绝对0度方向?
- Rocky和ChatGPT谈笑风生的日子 |【AI行研商业价值分析】
- 周大福向北京体育大学教育基金会捐赠1.2亿元设立“郑家纯冠军培养基金”
- core控制器属性注入的用处_.NET Core原生DI扩展之属性注入实现
- 过河问题----贪心
- 模拟弹子台球--java多线程应用
- 这个夏天:应用试客已将积分墙逼到墙角,ASO路上的那些掮客
- 登录webqq得金山快盘空间5G