【NOIP提高组】潜伏者

【NOIP提高组】潜伏者


💐The Begin💐点点关注,收藏不迷路💐

R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。

历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则:
1. S 国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所得的内容均由大写字母‘A’-‘Z’构成(无空格等其他字符)。
2. S 国对于每个字母规定了对应的“密字”。加密的过程就是将原信息中的所有字母替换为其对应的“密字”。
3. 每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。
例如,若规定‘A’的密字为‘A’,‘B’的密字为‘C’(其他字母及密字略),则原信息“ABA”被加密为ACA”。
现在,小 C 通过内线掌握了S 国网络上发送的一条加密信息及其对应的原信息。小C希望能通过这条信息,破译S 国的军用密码。小C 的破译过程是这样的:扫描原信息,对于原信息中的字母x(代表任一大写字母),找到其在加密信息中的对应大写字母y,并认为在密码里y 是x 的密字。如此进行下去直到停止于如下的某个状态:
1. 所有信息扫描完毕,‘A’-‘Z’ 所有 26 个字母在原信息中均出现过并获得了相应的“密字”。
2. 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
3. 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S 国密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
在小 C 忙得头昏脑涨之际,R 国司令部又发来电报,要求他翻译另外一条从S 国刚刚截取到的加密信息。现在请你帮助小C:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。

输入

共3 行,每行为一个长度在1 到100 之间的字符串。
第 1 行为小C 掌握的一条加密信息。
第 2 行为第1 行的加密信息所对应的原信息。
第 3 行为R 国司令部要求小C 翻译的加密信息。
输入数据保证所有字符串仅由大写字母‘A’-‘Z’构成,且第1 行长度与第2 行相等。

输出

共1行。
若破译密码停止时出现 2,3 两种情况,请你输出“Failed”(不含引号,注意首字母大写,其它小写)。否则请输出利用密码翻译电报中加密信息后得到的原信息。

样例输入

AA
AB
EOWIE

样例输出

Failed

C语言版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAXN 110// 用于记录字符是否在加密信息中出现过
int b1[MAXN] = { 0 };  
// 用于记录字符是否在原信息对应的密字中出现过
int b2[MAXN] = { 0 };  
// 用于存储字符的映射关系,即密字对应关系
char dic[MAXN] = { '\0' };  char s1[MAXN];
char s2[MAXN];
char s3[MAXN];
int num = 0;// 函数用于在出现错误情况时输出"Failed"并退出程序
void QAQ() {printf("Failed");exit(0);
}int main() {//freopen("F:\\rush.txt","r",stdin);// 读取加密信息scanf("%s", s1);// 读取加密信息对应的原信息scanf("%s", s2);// 读取需要翻译的加密信息scanf("%s", s3);int len = strlen(s1);// 遍历加密信息和对应的原信息,确定字符的映射关系for (int i = 0; i <= len - 1; i++) {// 如果当前加密信息中的字符是第一次出现if (!b1[s1[i]]) {b1[s1[i]] = 1;  // 标记该字符在加密信息中已出现过dic[s1[i]] = s2[i];  // 建立加密字符到原字符的映射关系// 如果原信息对应的密字已经出现过,说明有矛盾,调用QAQ函数输出"Failed"并退出if (b2[s2[i]] == 1) {QAQ();} else {b2[s2[i]] = 1;  // 标记该原信息对应的密字已出现过}num++;  // 记录已确定映射关系的字符对数} else {// 如果当前加密信息中的字符不是第一次出现,检查映射关系是否一致if (dic[s1[i]]!= s2[i]) {QAQ();}}}// 如果确定映射关系的字符对数小于26,说明原信息中字符未全部出现,调用QAQ函数输出"Failed"并退出if (num < 26) {QAQ();}len = strlen(s3);// 遍历需要翻译的加密信息,根据已确定的映射关系进行翻译并输出for (int i = 0; i <= len - 1; i++) {putchar(dic[s3[i]]);}return 0;
}

C++ 版本:

#include <iostream>
#include <string>
#include <map>const int MAXN = 110;// 用于记录字符是否在加密信息中出现过
std::map<char, int> b1;  
// 用于记录字符是否在原信息对应的密字中出现过
std::map<char, int> b2;  
// 用于存储字符的映射关系,即密字对应关系
std::map<char, char> dic;  std::string s1;
std::string s2;
std::string s3;
int num = 0;// 函数用于在出现错误情况时输出"Failed"并退出程序
void QAQ() {std::cout << "Failed";std::exit(0);
}int main() {//freopen("F:\\rush.txt","r",stdin);// 读取加密信息std::cin >> s1;// 读取加密信息对应的原信息std::cin >> s2;// 读取需要翻译的加密信息std::cin >> s3;int len = s1.length();// 遍历加密信息和对应的原信息,确定字符的映射关系for (int i = 0; i < len; i++) {// 如果当前加密信息中的字符是第一次出现if (!b1[s1[i]]) {b1[s1[i]] = 1;  // 标记该字符在加密信息中已出现过dic[s1[i]] = s2[i];  // 建立加密字符到原字符的映射关系// 如果原信息对应的密字已经出现过,说明有矛盾,调用QAQ函数输出"Failed"并退出if (b2[s2[i]] == 1) {QAQ();} else {b2[s2[i]] = 1;  // 标记该原信息对应的密字已出现过}num++;  // 记录已确定映射关系的字符对数} else {// 如果当前加密信息中的字符不是第一次出现,检查映射关系是否一致if (dic[s1[i]]!= s2[i]) {QAQ();}}}// 如果确定映射关系的字符对数小于26,说明原信息中字符未全部出现,调用QAQ函数输出"Failed"并退出if (num < 26) {QAQ();}len = s3.length();// 遍历需要翻译的加密信息,根据已确定的映射关系进行翻译并输出for (int i = 0; i < len; i++) {std::cout << dic[s3[i]];}return 0;
}

Java版本:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class Main {private static final int MAXN = 110;// 用于记录字符是否在加密信息中出现过private static Map<Character, Integer> b1 = new HashMap<>();// 用于记录字符是否在原信息对应的密字中出现过private static Map<Character, Integer> b2 = new HashMap<>();// 用于存储字符的映射关系,即密字对应关系private static Map<Character, Character> dic = new HashMap<>();private static String s1;private static String s2;private static String s3;private static int num = 0;// 函数用于在出现错误情况时输出"Failed"并退出程序private static void QAQ() {System.out.println("Failed");System.exit(0);}public static void main(String[] args) {//freopen("F:\\rush.txt","r",stdin);Scanner scanner = new Scanner(System.in);// 读取加密信息s1 = scanner.next();// 读取加密信息对应的原信息s2 = scanner.next();// 读取需要翻译的加密信息s3 = scanner.next();int len = s1.length();// 遍历加密信息和对应的原信息,确定字符的映射关系for (int i = 0; i < len; i++) {char char_s1 = s1.charAt(i);char char_s2 = s2.charAt(i);// 如果当前加密信息中的字符是第一次出现if (!b1.containsKey(char_s1)) {b1.put(char_s1, 1);  // 标记该字符在加密信息中已出现过dic.put(char_s1, char_s2);  // 建立加密字符到原字符的映射关系// 如果原信息对应的密字已经出现过,说明有矛盾,调用QAQ函数输出"Failed"并退出if (b2.containsKey(char_s2) && b2.get(char_s2) == 1) {QAQ();} else {b2.put(char_s2, 1);  // 标记该原信息对应的密字已出现过}num++;  // 记录已确定映射关系的字符对数} else {// 如果当前加密信息中的字符不是第一次出现,检查映射关系是否一致if (!dic.get(char_s1).equals(char_s2)) {QAQ();}}}// 如果确定映射关系的字符对数小于26,说明原信息中字符未全部出现,调用QAQ函数输出"Failed"并退出if (num < 26) {QAQ();}len = s3.length();// 遍历需要翻译的加密信息,根据已确定的映射关系进行翻译并输出for (int i = 0; i < len; i++) {char char_s3 = s3.charAt(i);System.out.print(dic.get(char_s3));}scanner.close();}
}

Python版本:

MAXN = 110# 用于记录字符是否在加密信息中出现过
b1 = {}  
# 用于记录字符是否在原信息对应的密字中出现过
b2 = {}  
# 用于存储字符的映射关系,即密字对应关系
dic = {}  s1 = ""
s2 = ""
s3 = ""
num = 0# 函数用于在出现错误情况时输出"Failed"并退出程序
def QAQ():print("Failed")exit(0)if __name__ == "__main__":#freopen("F:\\rush.txt","r",stdin);# 读取加密信息s1 = input()# 读取加密信息对应的原信息s2 = input()# 读取需要翻译的加密信息s3 = input()len_s1 = len(s1)# 遍历加密信息和对应的原信息,确定字符的映射关系for i in range(len_s1):# 如果当前加密信息中的字符是第一次出现if s1[i] not in b1:b1[s1[i]] = 1  # 标记该字符在加密信息中已出现过dic[s1[i]] = s2[i]  # 建立加密字符到原字符的映射关系# 如果原信息对应的密字已经出现过,说明有矛盾,调用QAQ函数输出"Failed"并退出if s2[i] in b2 and b2[s2[i]] == 1:QAQ()else:b2[s2[i]] = 1  # 标记该原信息对应的密字已出现过num += 1  # 记录已确定映射关系的字符对数else:# 如果当前加密信息中的字符不是第一次出现,检查映射关系是否一致if dic[s1[i]]!= s2[i]:QAQ()# 如果确定映射关系的字符对数小于26,说明原信息中字符未全部出现,调用QAQ函数输出"Failed"并退出if num < 26:QAQ()len_s3 = len(s3)# 遍历需要翻译的加密信息,根据已确定的映射关系进行翻译并输出for i in range(len_s3):print(dic[s3[i]], end="")

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安培环路定理

回忆 静电场中的回路定理&#xff1a;→静电场是保守场 安培环路定理 1、圆形回路包围无限长载流直导线 &#xff08;1&#xff09;回路逆时针 &#xff08;2&#xff09;回路顺时针 规定&#xff1a; 回路正向由右手螺旋定则判断&#xff08;根据回路绕行方向&#xff0c;…

Locally Linear Embedding (LLE)

Locally Linear Embedding (LLE) Locally Linear Embedding (LLE) 是一种非线性降维算法&#xff0c;通常用于高维数据的流形学习。其核心思想是&#xff1a;假设数据点在局部是线性结构&#xff0c;通过保留每个数据点的局部线性结构关系&#xff0c;将数据嵌入到低维空间中。…

wsl配置ubuntu22.04,并配置docker

wsl配置ubuntu22.04&#xff0c;并配置docker 文章目录 wsl配置ubuntu22.04&#xff0c;并配置docker一、在Windows上安装Linux子系统前提条件安装步骤 二、wsl安装系统到其他盘①查看wsl运行状态&#xff0c;将其保持在关闭状态②导出当前Linux的镜像③注销之前的系统并检查④…

「QT」文件类 之 QDir 目录类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

expo5.2运行web报错Cannot find module ‘react‘

修改app.json中的web output 配置为 ‘single’ 可以解决 expo run web 这个错误问题 "web": {"bundler": "metro","output": "single","favicon": "./assets/images/favicon.png"},相关链接&#xff1…

Xcode 16 pod init失败的解决方案

目录 前言 一、错误重现 二、解决方案 1.右击项目修改文件展示方式 2.修改.xcodeproj文件 3.参考文档 前言 我们使用Xcode创建新项目之后&#xff0c;执行pod init报错。我们看一下如何解决。 一、错误重现 RuntimeError - PBXGroup attempted to initialize an object …

Mysql-DDL语句

文章目录 DDL 语句DDL 操作库创建数据库修改数据库使用数据库 DDL 操作表Mysql 的数据类型创建表修改表结构 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Mysql专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月14日11点30分 DDL 语…

css三角制作(二十课)

代码&#xff1a; <style>/* 边框原理 */.box1 {width: 0;height: 0;border-top: 100px solid pink;border-bottom: 100px solid blue;border-left: 100px solid yellow;border-right: 100px solid greenyellow;}/* 三角制作 */.box2 {width: 0;height: 0;border: 100px …

高效稳定!新加坡服务器托管方案助力企业全球化布局

在全球化的商业环境中&#xff0c;企业对于高效、稳定的服务器托管方案的需求日益迫切。作为亚洲的服务器托管中心&#xff0c;新加坡凭借其独特的地理位置、稳定的政治环境、先进的科技设施以及开放的市场政策&#xff0c;为企业提供了理想的服务器托管解决方案&#xff0c;助…

【51单片机】LCD1602液晶显示屏

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 LCD1602存储结构时序结构 编码 —— 显示字符、数字 LCD1602 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

Qt 之 qwt和QCustomplot对比

QWT&#xff08;Qt Widgets for Technical Applications&#xff09;和 QCustomPlot 都是用于在 Qt 应用程序中绘制图形和图表的第三方库。它们各有优缺点&#xff0c;适用于不同的场景。 以下是 QWT 和 QCustomPlot 的对比分析&#xff1a; 1. 功能丰富度 QWT 功能丰富&a…

谷歌DeepMind推出了一种新的方式来“窥探”AI的“内心”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

PowerBI 用RANK,RANKX和TOPN 排名的简单示例

1. 销量表 2. 添加计算总销量的度量值&#xff0c;它将在RANK和RANKX里被使用 总销售量 SUM(销量[销售量]) 3.计算排名的度量值 RANK函数 排名 RANK(ALL(销量[产品]),ORDERBY([总销售量],DESC)) RANKX函数: 排名2 RANKX(ALL(销量),[总销售量],,DESC,Skip) 4.页面上添…

【EmbeddedGUI】脏矩阵设计说明

脏矩阵设计说明 背景介绍 一般情况下&#xff0c;当屏幕内容绘制完毕后&#xff0c;实际应用通常需要更新屏幕中的一部分内容&#xff0c;而不是单纯显示一个静态图片在那。 如下图所示&#xff0c;屏幕中有一个图片控件&#xff08;Img2&#xff09;和一个文本控件&#xf…

「QT」文件类 之 QTextStream 文本流类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

mysql 配置文件 my.cnf 增加 lower_case_table_names = 1 服务启动不了的原因

原因&#xff1a;在MySQL8.0之后的版本&#xff0c;只允许在数据库初始化时指定&#xff0c;之后不允许修改了 mysql 配置文件 my.cnf 增加 lower_case_table_names 1 服务启动不了 报错信息&#xff1a;Job for mysqld.service failed because the control process exited …

PVE纵览-安装系统卡“Loading Driver”的快速解决方案

PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字&#xff1a; PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…

[Android]相关属性功能的裁剪

1.将home界面的search bar 移除 /src/com/android/launcher3/graphics/LauncherPreviewRenderer.java // Add first page QSBif (FeatureFlags.QSB_ON_FIRST_SCREEN) {CellLayout firstScreen mWorkspaceScreens.get(FIRST_SCREEN_ID);View qsb mHomeElementInflater.infla…

Git的概念、安装、操作与分支管理和图形化界面TortoiseGit(小乌龟 )的安装与使用

目录 一、Git 概述 简介 安装 使用场景 二、Git 操作详解 使用git管理文件版本 使用 Git 管理代码 三、分支操作 使用小乌龟操作分支 创建新的分支 两个分支合并 四、总结 在当今的软件开发和文档编写等领域&#xff0c;版本控制工具至关重要。Git 作为其中的佼佼者…