洛谷 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. oracle存储过程中拼接字符串及转义逗号

     在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解     1.从第二个单引号开始被视为转义符,如果第二 ...

  2. strcasecmp()函数

    函数介绍: strcasecmp用忽略大小写比较字符串.,通过strcasecmp函数可以指定每个字符串用于比较的字符数,strncasecmp用来比较参数s1和s2字符串前n个字符,比较时会自动忽略 ...

  3. keras.preprocessing.text.Tokenizer

    说明:num_words的参数设置,对应着sequences_to_matrix方法返回的arrray的shape[1],用于约束返回数组的第2个维度.对texts_to_sequences(text ...

  4. Nginx的性能优化方案

    nginx的优化 . gzip压缩优化 . expires缓存有还 . 网络IO事件模型优化 . 隐藏软件名称和版本号 . 防盗链优化 . 禁止恶意域名解析 . 禁止通过IP地址访问网站 . HTTP ...

  5. ABP AOP 用例

    介绍 在本文中,我将向您展示如何创建拦截器来实现AOP技术.我将使用ASP.NET Boilerplate(ABP)作为基础应用程序框架和Castle Windsor作为拦截库.这里描述的大多数技术对 ...

  6. axios和fetch区别对比

    axios axios({ method: 'post', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' ...

  7. FilterRegistrationBean注册过滤器探究

    官方定义: A ServletContextInitializer to register Filters in a Servlet 3.0+ container. Similar to the re ...

  8. 2019-11-26-C#-判断方法是否被子类重写

    原文:2019-11-26-C#-判断方法是否被子类重写 title author date CreateTime categories C# 判断方法是否被子类重写 lindexi 2019-11- ...

  9. idea修改filetype

    settings/editor/file types把不小心改成Text类型的文件的wildcard去掉即可.

  10. UITableView与UITableViewCell

    转自:http://blog.sina.com.cn/s/blog_4cd14afb01014j97.html UITableView用来以表格的形式显示数据.关于UITableView,我们应该注意 ...