原题链接

题目大意:按照规则解码。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. tabbarcontroller 内嵌导航 控制器,2层push hide tabbar 后 ,第二层直接返回根视图控制器选择tabbarcontroller的其它vc 无法显示 tabbar的 问题解决方案

    场景如标题 这样不行: [self.navigationController popToRootViewControllerAnimated:YES]; MainViewController *mai ...

  2. RM报表里的变量

    // RMVariables['JEDT']:= InvoiceJeDx('123.55', 1); 这个是整个程序的全局变量 // RMReport2.Dictionary.Variables['J ...

  3. VisualSVN SERVER的安装和使用

    SVN Server安装 Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.下载的网址是:http://subversion.apache.org/packages. ...

  4. 一步步学习JSON

    什么是Json json是JavaScript Object Notation(javascript对象表示法)的缩写,是一种轻量的数据格式,是基于javascript的一个子集.与XML一样,jso ...

  5. jquery easyui DataGrid 动态的改变列显示的顺序

    $.extend($.fn.datagrid.methods,{ columnMoving: function(jq){ return jq.each(function(){ var target = ...

  6. CSS引入外部字体

    @font-face {    font-family: '综艺体';    font-style: normal;    font-weight: normal;    src: url(../cs ...

  7. Dom事件初步了解

    1.事件流 事件流可以分为两种:事件冒泡和事件捕获 1. 事件冒泡就是从目标元素一直冒泡到根元素html(IE和DOM浏览器都有) 2. 事件捕获就是从根元素到目标元素(DOM浏览器支持) 2.事件处 ...

  8. a Makefile

    obj-m += showpid.o obj-m += ps.o all: make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) mo ...

  9. xlistview的XML(头)xlistview_header

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  10. 【iOS开发】企业版证书($299)In-House方式发布指南 (转)

    一.明确几个概念 1.企业版IDP:即iOS Development Enterprise Program.注意是$299/Year那种,并不是$99/Year的那种. 2.In House:是只企业 ...