当前位置: 首页 > news >正文

【寒假每日一题】洛谷 P1079 [NOIP2012 提高组] Vigenère 密码

题目链接:P1079 [NOIP2012 提高组] Vigenère 密码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

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

 
在密码学中,我们称需要加密的信息为明文,用 M 表示;称加密后的信息为密文,用 C 表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为 k。 在 Vigenère 密码中,密钥 k 是一个字母串,k=k1,k2,…,kn。当明文 M=m1,m2,…,mn 时,得到的密文 C=c1,c2,…,cn,其中 ci=mi®ki,运算®的规则如下表所示:

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

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

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

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

输入格式

共 2 行。

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

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

输出格式

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

样例 #1

样例输入 #1

CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm

样例输出 #1

Wherethereisawillthereisaway

提示

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

NOIP 2012 提高组 第一天 第一题

AC code:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string> 

using namespace std;

int main()
{
	string k;
	cin>>k;
	string c;
	cin>>c;
	
	string res;
	
	for(int i = 0 ; i < k.size() ; i ++)
		if('a' <= k[i] && k[i] <= 'z')
			k[i] -= 32;
			
	for(int i = 0 , j = 0 ; i < c.size() ; i ++)
	{
		if(toupper(c[i]) < k[j])
			res += c[i] + 26 - (k[j] - 'A');
		else
			res += c[i] - (k[j] - 'A');
		j = (j + 1) % (k.size()); 
	}
	cout<<res<<endl;
	
	return 0;
} 

相关文章:

  • 【概率论】期末复习笔记:参数估计
  • k-means算法进行数据分析应用
  • 【数据结构】单链表(线性表)的实现
  • JavaScript 入门基础 - 流程控制(四)
  • 剑指offer----C语言版----第五天
  • 使用python实现跨年烟花代码
  • 【Linux】Linux下基本指令(三)
  • Pyinstaller - 你的“神”队友
  • 【nowcoder】笔试强训Day15
  • 计算机基础知识(基础入门小白专属)七
  • Vue3详细讲解
  • Docker+Nginx打包部署前后端分离项目
  • 一文读懂HTTPS
  • 「地表最强」C++核心编程(十一)文件操作
  • shell第五天作业——函数与数组
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Fundebug计费标准解释:事件数是如何定义的?
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • java中具有继承关系的类及其对象初始化顺序
  • js作用域和this的理解
  • MySQL的数据类型
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PHP CLI应用的调试原理
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • win10下安装mysql5.7
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 浮现式设计
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于游标的分页接口实现
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 小而合理的前端理论:rscss和rsjs
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 用Visual Studio开发以太坊智能合约
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (31)对象的克隆
  • (4.10~4.16)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (SpringBoot)第二章:Spring创建和使用
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (简单) HDU 2612 Find a way,BFS。
  • (转)【Hibernate总结系列】使用举例
  • (转)可以带来幸福的一本书
  • (转载)Google Chrome调试JS
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 redis操作类
  • .net core 控制台应用程序读取配置文件app.config
  • .Net Core 中间件验签
  • .net MySql