2012 noip提高 Vigenère 密码
P1079 Vigenère 密码
题目描述
16 世纪法国外交家 Blaise de VigenèreBlaisedeVigene`re 设计了一种多表密码加密算法―― VigenèreVigene`re 密码。 VigenèreVigene`re 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。在密码学中,我们称需要加密的信息为明文,用 M 表示;称加密后的信息为密文,用 C 表示;而密钥是一种参数,是将明文转换为密文或将
密文转换为明文的算法中输入的数据,记为 k 。 在 VigenèreVigene`re 密码中,密钥 k 是一个字母串, k=k1,k2,…,kn 。当明文 M=m1,m2,…,mn 时,得到的密文 C=C=c1,c2,…,cn ,其中 ci = mi ® ki ,运算®的规则如下表所示:
VigenèreVigene`re 加密在操作时需要注意:
®运算忽略参与运算的字母的大小写,并保持字母在明文 MM 中的大小写形式;
当明文 M 的长度大于密钥 k 的长度时,将密钥 k例如,明文 M=Helloworld ,密钥 k=abc 时,密文 C=Hfnlpyosnd 。
输入输出格式
输入格式:
共 2 行。
第一行为一个字符串,表示密钥 kk ,长度不超过 100 ,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过 1000 ,其中仅包含大小写字母。
输出格式:
一个字符串,表示输入密钥和密文所对应的明文。
输入输出样例
CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm
Wherethereisawillthereisaway
说明
【数据说明】
对于 100%的数据,输入的密钥的长度不超过 100100 ,输入的密文的长度不超过 10001000 ,且都仅包含英文字母。
NOIP 2012 提高组 第一天 第一题
解题分析:
题目中说不区分大小写,所以输入后我们可以将两字符串转为相同的大小写,这里全部转为小写。
注意:大小写转换函数 大写strupr() 小写strlwr() 不可用,需要手写。
然而输出时需要以密文的大小写判断输出的大小写,所以另开一个数组储存密文,以便于输出判断大小写。
然后,考虑题目图中的密码规律,以Z-Z为分界线,你会发现左上角每一个字符用不相同的两组 字符 表示,两组字符ASCII码相加相等,同样右下角也这样。
根据这个规律,我们可以预处理出每两个字符组表示的字符(下边贴有代码)。
然后有了密文,有了密钥,我们又已经处理出来来了表示的字符,相反的推理回去,得出明文(注意大小写判断)
预处理部分:
最小相加为 a+a=194,最大z+z=244.
第一行处理左上角,第二行处理右下角。
for(int i=;i<=;i++)ans[i]=char(i-'a');
for(int i=;i<=;i++)ans[i]=ans[i-];
AC代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
#define N int(100+2)
#define M int(1000+2)
char a[M],b[M],c[M],ans[];
int main()
{
scanf("%s",a+);int la=strlen(a+);
scanf("%s",b+);int lb=strlen(b+);
for(int i=;i<=lb;i++)c[i]=b[i];
for(int i=;i<=la;i++)if(a[i]<='Z'&&a[i]>='A')a[i]+=;
for(int i=;i<=lb;i++)if(b[i]<='Z'&&b[i]>='A')b[i]+=;
if(la<lb)
{
for(int i=la+;i<=lb;i++)a[i]=a[i-la]; //要密钥和密文一样长度,注意数组大小。
}
for(int i=;i<=;i++)ans[i]=char(i-'a'); //预处理部分。
for(int i=;i<=;i++)ans[i]=ans[i-];
for(int i=;i<=lb;i++)
{
for(int j=;j<=;j++)
{
if(b[i]==ans[j]&&j-a[i]<='z'&&j-a[i]>='a')
{
if(c[i]<='Z'&&c[i]>='A')printf("%c",j-a[i]-);
else printf("%c",j-a[i]);
}
}
}
}
2012 noip提高 Vigenère 密码的更多相关文章
- 2012 Noip提高组 Day1
1262. [NOIP2012] Vigenère 密码 ★ 输入文件:vigenere.in 输出文件:vigenere.out 简单对比时间限制:1 s 内存限制:128 MB [ ...
- 2012 Noip提高组 Day2
1265. [NOIP2012] 同余方程 ★☆ 输入文件:mod.in 输出文件:mod.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 求关于 x 的同余方 ...
- NOIP提高真题整理(2011-2018)-标签
加粗的后面应该会有相应的简单解析(如果没咕的话:)). 2011 day1 T1:铺地毯:逆着铺 T2:选择客栈:按颜色分类枚举+二分答案 T3:Mayan游戏:大模拟dfs+剪枝 day2 T1:计 ...
- Vigenère密码 2012年NOIP全国联赛提高组(字符串模拟)
P1079 Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简 ...
- Vigenère 密码NOIP 2012 提高组 第一天 第一题
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- NOIp 2012 #1 Vigenère 密码 Label:模拟
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- NOIP 2012 Vigenère 密码
洛谷 P1079 Vigenère 密码 https://www.luogu.org/problemnew/show/P1079 JDOJ 1779: [NOIP2012]Vigenèr密码 D1 T ...
- [NOIP2012] 提高组 洛谷P1079 Vigenère 密码
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- Noip2012 提高组 Day1 T1 Vigenère 密码
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
随机推荐
- 洛谷 - P1337 - 平衡点/吊打XXX
一眼看过去以为是模拟退火/随机增量之类的.感觉先跑个凸包,然后在凸包内随机转移. 根据力臂长度*重量计算每个方向的分力?判断一个点比原来的点更平衡,是指他们的合力更接近0?每次判断要遍历一次,使用n的 ...
- 51nod1266【水】
最短,两半分开走 最长,一边走,比较一下两端就好了. #include <bits/stdc++.h> using namespace std; typedef long long LL; ...
- python 类对象和实例对象动态添加方法
class Person(): def __init__(self, name): self.name = name def print_name(self): print(self.name) p ...
- bzoj 4698: Sdoi2008 Sandy的卡片【SAM】
差分之后用SAM求LCS,然后答案就是LCS+1 #include<iostream> #include<cstdio> #include<cstring> usi ...
- UVA - 10817 Headmaster's Headache
题目大意:有一些老师,每一位都有自己的工资以及教授的课程.共s<=8个课程.其中的一些老师必须选择,问你保证每节课至少有一个老师的最少总工资. 题解: 首先很容易想到状态压缩,搞一个3进制的数, ...
- JAVA多线程(一) Thread & Runnable
githut代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service/ ...
- influxdb数据库的安装部署(windows)二
1.把下载好的文件解压到目录中 2.以管理员身份运行cmd进入influxdb-1.7.6-1文件夹 3.生成influxdb数据的默认配置Config文件 4.修改Config配置信息 5.用配置好 ...
- uni-app引入阿里iconfont
前言: 目前正在通过 UNI-APP平台开发移动应用,uni-app平台是去年年出才创建的一个新品台,因此资源相对比较匮乏,在此遇到一个问题,一直使用别人提供的iconfont,但总是不够用,为了解决 ...
- scikit-learning教程(二)统计学习科学数据处理的教程二
模型选择:选择估计量及其参数 得分和交叉验证的分数 如我们所看到的,每个估计者都会公开一种score可以判断新数据的拟合质量(或预测)的方法.越大越好. >>> >>&g ...
- 模拟 Codeforces Round #297 (Div. 2) A. Vitaliy and Pie
题目传送门 /* 模拟:这就是一道模拟水题,看到标签是贪心,还以为错了呢 题目倒是很长:) */ #include <cstdio> #include <algorithm> ...