洛谷 P1079 Vigenère 密码

https://www.luogu.org/problemnew/show/P1079

JDOJ 1779: [NOIP2012]Vigenèr密码 D1 T1

https://neooj.com:8082/oldoj/problem.php?id=1779

题目描述

16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密码。Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。

在密码学中,我们称需要加密的信息为明文,用 M表示;称加密后的信息为密文,用C表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为kk。 在 VigenèreVigene`re 密码中,密钥kk是一个字母串,k=k_1,k_2,…,k_nk=k1​,k2​,…,kn​。当明文 M=m_1,m_2,…,m_nM=m1​,m2​,…,mn​时,得到的密文 C=c_1,c_2,…,c_nC=c1​,c2​,…,cn​,其中c_ici​=m_imi​®k_iki​,运算®的规则如下表所示:

Vigenère 加密在操作时需要注意:

  1. ®运算忽略参与运算的字母的大小写,并保持字母在明文MM 中的大小写形式;

  2. 当明文 MM 的长度大于密钥 kk 的长度时,将密钥 kk重复使用。

例如,明文 M=Helloworld,密钥k=abc 时,密文 C=Hfnlpyosnd。

输入输出格式

输入格式:

共 2 行。

第一行为一个字符串,表示密钥kk,长度不超过100100,其中仅包含大小写字母。

第二行为一个字符串,表示经加密后的密文,长度不超过10001000,其中仅包含大小写字母。

输出格式:

一个字符串,表示输入密钥和密文所对应的明文。

输入输出样例

输入样例#1: 复制

CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm
输出样例#1: 复制

Wherethereisawillthereisaway 

说明

【数据说明】

对于 100%的数据,输入的密钥的长度不超过 100100,输入的密文的长度不超过10001000,且都仅包含英文字母。

NOIP 2012 提高组 第一天 第一题

 
 一看到那个图片,不用说了,打表吧。
有的大佬使用一些高端操作可以不用手动复制粘贴就可以把表存到数组中,原谅我不会。
本以为手打很稳妥了,但还是错了,错的很惨,为什么呢?
 
不能把原表原封不动地打进去。
你要注意你打进去的是1行还是0行。
读的时候是从1开始还是从0开始。
这就是细节,细节决定成败。
然后还有一些基本技巧,比如大小写转换。
CODE:
#include<bits/stdc++.h>
using namespace std;
string c1,c2;
bool k[];
char a[][]={
{"abcdefghijklmnopqrstuvwxyz"},
{"zabcdefghijklmnopqrstuvwxy"},
{"yzabcdefghijklmnopqrstuvwx"},
{"xyzabcdefghijklmnopqrstuvw"},
{"wxyzabcdefghijklmnopqrstuv"},
{"vwxyzabcdefghijklmnopqrstu"},
{"uvwxyzabcdefghijklmnopqrst"},
{"tuvwxyzabcdefghijklmnopqrs"},
{"stuvwxyzabcdefghijklmnopqr"},
{"rstuvwxyzabcdefghijklmnopq"},
{"qrstuvwxyzabcdefghijklmnop"},
{"pqrstuvwxyzabcdefghijklmno"},
{"opqrstuvwxyzabcdefghijklmn"},
{"nopqrstuvwxyzabcdefghijklm"},
{"mnopqrstuvwxyzabcdefghijkl"},
{"lmnopqrstuvwxyzabcdefghijk"},
{"klmnopqrstuvwxyzabcdefghij"},
{"jklmnopqrstuvwxyzabcdefghi"},
{"ijklmnopqrstuvwxyzabcdefgh"},
{"hijklmnopqrstuvwxyzabcdefg"},
{"ghijklmnopqrstuvwxyzabcdef"},
{"fghijklmnopqrstuvwxyzabcde"},
{"efghijklmnopqrstuvwxyzabcd"},
{"defghijklmnopqrstuvwxyzabc"},
{"cdefghijklmnopqrstuvwxyzab"},
{"bcdefghijklmnopqrstuvwxyza"},
};
int main()
{
cin>>c2>>c1;
int n1=c1.length(),n2=c2.length();
for(int i=;i<n1;i++)
{
if(c1[i]>='A' && c1[i]<='Z')
{
c1[i]=c1[i]-'A'+'a';
k[i]=;
}
}
for(int i=;i<n2;i++)
if(c2[i]>='A' && c2[i]<='Z')
c2[i]=c2[i]-'A'+'a';
for(int i=;i<n1;i++)
{
int s=i%n2;
int a1=c1[i]-'a';
int a2=c2[s]-'a';
if(k[i]==)
cout<<char(a[a2][a1]-'a'+'A');
else
cout<<a[a2][a1];
}
return ;
}

NOIP 2012 Vigenère 密码的更多相关文章

  1. 2012 noip提高 Vigenère 密码

    P1079 Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de VigenèreBlaisedeVigene`re 设计了一种多表密码加密算法―― VigenèreVigene ...

  2. NOIp 2012 #1 Vigenère 密码 Label:模拟

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  3. Vigenère密码 2012年NOIP全国联赛提高组(字符串模拟)

    P1079 Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简 ...

  4. Vigenère 密码NOIP 2012 提高组 第一天 第一题

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  5. [NOIP2012] 提高组 洛谷P1079 Vigenère 密码

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  6. Vigenère 密码(luogu 1079)

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  7. 洛谷 P1079 Vigenère 密码

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  8. Noip2012 提高组 Day1 T1 Vigenère 密码

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  9. NOIP 2012 Day1

    tags: NOIP 模拟 倍增 高精 Python categories: 信息学竞赛 总结 Luogu P1079 Vigenère 密码 Solution 表示并不是很懂其他人发的题解. 我是这 ...

随机推荐

  1. Linux学习笔记-第11天 特殊的RAID与LVM

    没搞清楚madam是什么意思, 这点是个疑问,其实发现书上有挺多没讲到的地方,比如LVM是不支持有些分区格式的.看来课后还是要做好细化工作.

  2. 物联网架构成长之路(40)-Bladex开发框架入门

    0. 前言 前一小节,讲了如何入门,这里就简单讲一下如何自定义查询和权限控制配置. 1. 配置多租户 如果要启用该表的多租户功能,需要在application.yml 这里配置. 2. 配置模糊匹配 ...

  3. netstat查看端口状态

    netstat netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况. netstat 查看端口占用语法格式: netstat -tunlp | grep 端口号 -t (t ...

  4. vue项目使用Ueditor富文本编辑器总结

    我使用的是前端大佬封装的vue-ueditor-wrap插件,结合ueditor本身的压缩包开发的. 1.下载vue-ueditor-wrap: npm install vue-ueditor-wra ...

  5. 截图自动添加水印图片工具 pickpick设置中文语言

    推荐一款截图工具,主要是可以截图自动带水印,效果不错 最近发现我的不少文章被转载的到处都是.乱七八糟,这个功能后续准备做个水印用起来,感觉不错 主角介绍 首先介绍下主角 PickPick

  6. 小程序开发笔记(八)—Js数组按日期分组显示数据

    数据分组展示有两种方式,一种是后端直接传入分组格式的Json数据,另一种是我们在前端自己转换格式,这里我们在前端处理转换按日期分组的数据格式 1.例如后端返回数据格式为: [{createtime:' ...

  7. Quartz的配置与使用

    什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为 ...

  8. .NET Core on K8S快速入门课程--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 目录 01-介绍K8s是什么 02-为什么要学习k8s 03-如何学习k8s ...

  9. easyui 扩展 datagrid 数据网格视图

    效果如图: js代码: $("#tdg").datagrid({            width: 200,            url: "/Laboratory/ ...

  10. mvc5 源码解析1:UrlRoutingModule

    注册在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG \webconfig中 在该module源码中 我们可以看出注册了application ...