ZOJ 1042 W’s Cipher
题目大意:按照规则解码。26个字母分成三组,每一组按照顺时针移位编码。现在已知移动的位数,要求解码。
解法:以前看过一本古典密码学的书,百度贴吧密码吧也有很多经典的加密方法,想什么凯撒移位、弗吉尼亚编码等等。古典密码学比现代密码学有趣多了。这道题可以开三个队列,先把字符串压入对应的队列,然后调整顺序,再合成输出。不难,稍烦。
参考代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; int main(){
int k1,k2,k3,i,len,pos[100];
char str[100],c;
queue<char> s1;
queue<char> s2;
queue<char> s3; while(cin>>k1>>k2>>k3){
if(k1==0&&k2==0&&k3==0)break;
scanf("%s",&str);
while(!s1.empty())s1.pop(); //empty queues
while(!s2.empty())s2.pop();
while(!s3.empty())s3.pop();
len=strlen(str);
for(i=0;i<len;i++){
if(str[i]<='i'&&str[i]>='a'){
s1.push(str[i]);
pos[i]=1;
}
else if(str[i]<='r'&&str[i]>='j'){
s2.push(str[i]);
pos[i]=2;
}
else{
s3.push(str[i]);
pos[i]=3;
}
}
if(!s1.empty())k1=k1%(s1.size()); // if s1 is empyt, k1%(s1.seze()) will cause floating point error
if(!s2.empty())k2=k2%(s2.size());
if(!s3.empty())k3=k3%(s3.size());
while(k1<s1.size()){
c=s1.front();
s1.pop();
s1.push(c);
k1++;
}
while(k2<s2.size()){
c=s2.front();
s2.pop();
s2.push(c);
k2++;
}
while(k3<s3.size()){
c=s3.front();
s3.pop();
s3.push(c);
k3++;
}
for(i=0;i<len;i++){
switch(pos[i]){
case 1:
cout<<s1.front();
s1.pop();
break;
case 2:
cout<<s2.front();
s2.pop();
break;
case 3:
cout<<s3.front();
s3.pop();
break;
}
}
cout<<endl;
} return 0;
}
ZOJ 1042 W’s Cipher的更多相关文章
- POJ - 1107 W's Cipher
POJ - 1107 W's Cipher Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u De ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- PHP的AES加密类
PHP的AES加密类 aes.php <?php /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
- ethereumjs/ethereumjs-wallet
Utilities for handling Ethereum keys ethereumjs-wallet A lightweight wallet implementation. At the m ...
- lucene入门创建索引——(二)
1.程序宏观结构图
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3494 BCD Code(AC自动机+数位DP)
BCD Code Time Limit: 5 Seconds Memory Limit: 65536 KB Binary-coded decimal (BCD) is an encoding ...
随机推荐
- 仿淘宝js图片切换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- IT公司100题-12-求1+2+…+n
问题描述: 求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 分析: 利用类的静态变量实现: new一含有n ...
- Quartz之主方法运行
import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; impo ...
- PC客户端测试总结
1.1界面显示内容的检查l 完整性(1显示时应考虑数据显示宽度的自适应或自动换行(数据长度较长).(2所数据展现的界面(如查询等),必须使测试数据的记录数超过一页,以验证满页时其窗体是否有横向.纵向滚 ...
- IOS NSInvocation用法简介
IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...
- loaderexceptions
前段时间遇到一个问题 从容器中取数据时老报一个“无法加载一个或多个请求,请检索loaderexceptions” 真心是不晓得什么问题 以前经常这么用没有问题的 这个是在网站下引用了别的已经编译好的别 ...
- (转) mysql的连接,创建账号,修改密码
原文:http://blog.chinaunix.net/uid-20749043-id-1878306.html mysql的连接,创建账号,修改密码 2008-10-13 15:31:29 分类 ...
- java classpath深入详解(转)
http://developer.51cto.com/art/200509/2786.htm 设置类路径 结构 可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPA ...
- 学军NOIP2016模拟赛1
GTMD这么水的一套题没有AK T1:妥妥的二分答案,贪心check. T2:问题可以转化为最长上升(还是下降我记不住了)子序列. T3:发现点被覆盖上的顺序是一定的.求出这个顺序,第一个操作在线段树 ...
- UI基础:UIActionSheet和UIAlterView
iOS中有两个弹出视图的控件,分别是UIActionSheet和UIAlterView.效果图如下: 主要代码如下: - (void)viewDidLoad { [super viewDi ...