大家帮我看一个OpenJudge题目——古代密码
描述
古罗马帝王有一个包括各种部门的强大政府组织。其中有一个部门就是保密服务部门。为了保险起见,在省与省之间传递的重要文件中的大写字母是加密的。当时最流行的加密方法是替换和重新排列。
替换方法是将所有出现的字符替换成其它的字符。有些字符会碰巧替换成它自己。例如:替换规则可以是将'A' 到 'Y'替换成它的下一个字符,将'Z'替换成 'A',如果原词是 "VICTORIOUS" 则它变成 "WJDUPSJPVT"。
排列方法改变原来单词中字母的顺序。例如:将顺序 <2, 1, 5, 4, 3, 7, 6, 10, 9, 8> 应用到 "VICTORIOUS" 上,则得到"IVOTCIRSUO"。
人们很快意识到单独应用替换方法或排列方法,加密是很不保险的。但是如果结合这两种方法,在当时就可以得到非常可靠的加密方法。所以,很多重要信息先使用替换方法加密,再将加密的结果用排列的方法加密。用两中方法结合就可以将"VICTORIOUS" 加密成"JWPUDJSTVP"。
考古学家最近在一个石台上发现了一些信息。初看起来它们毫无意义,所以有人设想它们可能是用替换和排列的方法被加密了。人们试着解读了石台上的密码,现在他们想检查解读的是否正确。他们需要一个计算机程序来验证她,你的任务就是写这个验证程序。
输入
输入有两行。第一行是石台上的文字。文字中没有空格,并且只有大写英文字母。第二行是被解读出来的加密前的文字。第二行也是由大写英文字母构成的。
两行字符数目的长度都不超过计划100。
输出
如果第二行经过某种加密方法后可以产生第一行的信息,输出 "YES",否则输出"NO"。
样例输入
JWPUDJSTVP
VICTORIOUS
样例输出
YES
我用C++写的,我的思路是,对加密前的文字进行排序,然后测试各个加密后的文字,但是总是Wrong Answer……请大家帮忙看下。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void)
{
string code, org, tmp;
cin >> code >> org;
sort(org.begin(), org.end());
int f = 0;
for (int j = 1; j <= 25; j++)
{
tmp = code;
for (int i = 0; tmp[i] != '\0'; i++)
{
if (tmp[i] - j < 65)
tmp[i] += 26 - j;
else
tmp[i] -= j;
}
sort(tmp.begin(), tmp.end());
if (org == tmp)
{
cout << "YES" << endl;
f = 1;
break;
}
}
if (f == 0)
cout << "NO" << endl;
return 0;
}
相关推荐
OpenJudge简单密码解密[源码]
本文详细介绍了OpenJudge平台上的一道简单密码解密题目,提供了Java和C++两种编程语言的解题思路和完整代码实现。题目要求对加密字符串进行解密,其中大写字母A~E需要右移21位,其余大写字母则需要左移5位。文章首先分析了题目要求,然后分别给出了Java和C++的解题步骤,包括关键函数的使用和逻辑处理过程。Java部分使用了Character.isUpperCase方法判断字符是否为大写字母,并通过循环遍历字符数组进行解密处理;C++部分则使用了isupper函数实现类似功能。最后,两种语言都提供了完整的可执行程序代码,方便读者参考和实践。
90、1749数字方格(2020.03.13)a.pdf
90、1749数字方格(2020.03.13)a
蒙古国寺庙shp信息点wgs84.zip
蒙古国寺庙shp信息点wgs84.zip
【电力系统状态估计与PMU(相量测量单元)】使用WLS和PMU来估计系统的电压幅值和角度还将这些值与使用Newton-Raphson方法获得的状态进行比较(Matlab代码实现)
内容概要:本文系统阐述了基于加权最小二乘法(WLS)融合相量测量单元(PMU)量测数据进行电力系统状态估计的理论与实现方法,重点研究了如何利用PMU提供的高精度、高同步性的电压和电流相量信息,构建精确的量测方程,并将其集成到传统的WLS状态估计算法中,以实现对系统节点电压幅值和相角的高精度估计。文中详细描述了WLS-PMU联合估计模型的数学推导过程,包括状态变量定义、量测函数建立、雅可比矩阵计算及迭代求解流程,并通过Matlab编程实现了该算法。研究进一步将WLS-PMU的估计结果与基于传统SCADA量测和牛顿-拉夫森(Newton-Raphson)潮流计算的状态估计结果进行对比分析,通过仿真验证了PMU的引入能显著提升状态估计的精度、收敛速度和抗噪声能力,为现代电力系统的高精度实时监控与安全分析提供了有效的技术手段。; 适合人群:具备电力系统分析、现代控制理论基础,熟悉状态估计、潮流计算原理,并能熟练运用Matlab进行仿真实验的电气工程专业高年级本科生、研究生及从事电力系统自动化、智能电网相关领域的科研人员和技术工程师。; 使用场景及目标:① 掌握融合PMU量测的WLS状态估计模型的完整构建方法与理论依据;② 学习并掌握在Matlab环境中实现WLS算法及Newton-Raphson潮流计算的具体编程技巧与仿真流程;③ 通过定量对比分析,深入理解PMU在提升电网可观测性、增强状态估计鲁棒性方面的核心价值与技术优势。; 阅读建议:建议读者在阅读时紧密结合所提供的Matlab代码,逐行分析算法实现细节,特别是PMU量测方程的处理、权重矩阵的设定以及WLS迭代过程的逻辑。鼓励通过修改系统参数(如网络拓扑、PMU配置数量与位置)、引入不同程度的量测噪声等方式进行扩展性仿真实验,以直观感受不同因素对估计性能的影响,从而深化对状态估计理论精髓的理解。
基于OFDM的基带通信系统仿真平台设计与实现(Matlab代码实现)
内容概要:本文详细介绍了基于OFDM(正交频分复用)的基带通信系统仿真平台的设计与实现,依托Matlab进行代码开发,旨在构建一个完整、可复现的通信系统仿真环境。该平台系统性地实现了通信链路中的核心模块,包括信号调制解调、信道编码、多载波生成、IFFT/FFT变换、循环前缀的添加与去除、信道建模以及接收端的均衡处理等关键环节,能够全面模拟无线通信过程中的物理层操作。通过该仿真平台,研究人员不仅可以深入理解OFDM技术的内在工作原理,还能灵活调整调制方式、编码方案、信道模型等参数,进而开展误码率性能分析与系统优化研究,为实际通信系统的设计与验证提供坚实的理论依据和技术支撑。; 适合人群:具备通信原理基础知识,熟悉Matlab编程,从事通信工程、电子信息或相关领域研究的研究生、科研人员及工程师。; 使用场景及目标:① 学习和掌握OFDM通信系统的基本架构与关键技术;② 在Matlab环境中搭建可复现的基带通信仿真平台,用于教学演示或科研验证;③ 通过调整调制方式、编码方案、信道模型等参数,开展系统性能评估与优化研究。; 阅读建议:建议读者结合通信原理教材,按照模块逐步实现各功能组件,并通过仿真结果分析其影响,从而加深对OFDM系统工作机制的理解。


