原题链接

题目大意:按照规则解码。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的更多相关文章

  1. POJ - 1107 W's Cipher

    POJ - 1107 W's Cipher Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u De ...

  2. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  3. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  4. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  5. PHP的AES加密类

    PHP的AES加密类 aes.php <?php /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  6. ethereumjs/ethereumjs-wallet

    Utilities for handling Ethereum keys ethereumjs-wallet A lightweight wallet implementation. At the m ...

  7. lucene入门创建索引——(二)

    1.程序宏观结构图

  8. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  9. ZOJ 3494 BCD Code(AC自动机+数位DP)

    BCD Code Time Limit: 5 Seconds      Memory Limit: 65536 KB Binary-coded decimal (BCD) is an encoding ...

随机推荐

  1. HDU 1533 KM算法(权值最小的最佳匹配)

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. JobTracker启动流程源码级分析

    org.apache.hadoop.mapred.JobTracker类是个独立的进程,有自己的main函数.JobTracker是在网络环境中提交及运行MR任务的核心位置. main方法主要代码有两 ...

  3. 【未完成0.0】Noip2012提高组day2 解题报告

    第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一 ...

  4. FG模型

    一直没搞懂CvBGStatModel和CvFGDStatModel有什么区别.CvBGStatModel模型的创建用cvCreateGaussianBGModel,CvFGDStatModel模型的创 ...

  5. sql游标的使用入门

    游标的理解: 游标其实可以理解成一个定义在特定数据集上的指针,我们可以控制这个指针遍历数据集,或者仅仅是指向特定的行,所以游标是定义在以Select开始的数据集上的 普通的sql语句是面向集合的,游标 ...

  6. iPhone 6/6 Plus国行版开卖当日抢购攻略

    在距离苹果首批发售时隔一个月也就是北京时间10月17日,苹果iPhone 6.iPhone 6 Plus终于也要在中国大陆开卖,众多国内用户终于有机会安排自己的购机计划.据不完全数据显示,目前iPho ...

  7. selectNodes

    解析beans.xml的时候有时候找不到节点,把其他多余的删除之后就好了,不知道为什么.

  8. CSS练习一(模仿163邮箱登陆)

    // '); code = code.replace(/&/g, '&'); return code; }; var runCode = function (code) { if (c ...

  9. html5 placeholder

    placeholder是html5<input>标签的一个属性,placeholder 属性提供可描述输入字段预期值的提示信息(hint).该提示会在输入字段为空时显示,并会在字段获得焦点 ...

  10. 修复win8引导

    格式化那个350MB的分区(Win8安装盘启动之后挂载在c:之后,用Win8的安装U盘,进去修复模式,然后进入高级选项的命令行提示符模式.接着,转到安装现有Win8的分区(Win8安装盘启动之后挂载在 ...