ACM详解(8)——加密

同态加密的原理详解与go实践 学习资料来源: https://zhuanlan.zhihu.com/p/110210315 知乎刘巍然:https://www.zhihu.com/question/27645858/answer/37598506 https://blog.youkuaiyun.com/Gouph/article/details/106179325 一、基本概念 1.1 同态加密 什么是同态加密? 提出第一个构造出全同态加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry给出的. 阅读详情
比赛的时候告诉你简单的加密算法,让你完成加密或者解密操作,下面通过几个简单例子介绍。
1、Message Decowding
Description
The cows are thrilled because they've just learned about encrypting messages. They think they will be able to use secret messages to plot meetings with cows on other farms.
Cows are not known for their intelligence. Their encryption method is nothing like DES or BlowFish or any of those really good secret coding methods. No, they are using a simple substitution cipher.
The cows have a decryption key and a secret message. Help them decode it. The key looks like this:
        yrwhsoujgcxqbativndfezmlpk
Which means that an 'a' in the secret message really means 'y'; a 'b' in the secret message really means 'r'; a 'c' decrypts to 'w'; and so on. Blanks are not encrypted; they are simply kept in place.
Input text is in upper or lower case, both decrypt using the same decryption key, keeping the appropriate case, of course.
Input
* Line 1: 26 lower case characters representing the decryption key
* Line 2: As many as 80 characters that are the message to be decoded
Output
* Line 1: A single line that is the decoded message. It should have the same length as the second line of input.
Sample Input
eydbkmiqugjxlvtzpnwohracsf
Kifq oua zarxa suar bti yaagrj fa xtfgrj
Sample Output
Jump the fence when you seeing me coming
翻译:简单的加密算法,把字符串中的字符替换成另外的字符,只有对方知道如何替换就可以解密。题目要求根据给定的加密方法和密文,得到原始消息。
解题思路:
第一行eydbkmiqugjxlvtzpnwohracsf相当于密钥,含义是
a对应e
b对于y
c对应d
…
只要把密文序列中的相应字符替换为后面的字符即可。
Kifq oua zarxa suar bti yaagrj fa xtfgrj
把K替换成J
把i替换成u
把f替换成m
…
(注意大小写)
编程的时候:可以定义数组表示密钥。然后对密文进行遍历得到原始信息。不再给出参考代码。
2、Ancient Cipher
Description
Ancient Roman empire had a strong government system with various departments, including a secret service department. Important documents were sent between provinces and the capital in encrypted form to prevent eavesdropping. The most popular ciphers in those times were so called substitution cipher and permutation cipher.
Substitution cipher changes all occurrences of each letter to some other letter. Substitutes for all letters must be different. For some letters substitute letter may coincide with the original letter. For example, applying substitution cipher that changes all letters from 'A' to 'Y' to the next ones in the alphabet, and changes 'Z' to 'A', to the message "VICTORIOUS" one gets the message "WJDUPSJPVT".
Permutation cipher applies some permutation to the letters of the message. For example, applying the permutation <2, 1, 5, 4, 3, 7, 6, 10, 9, 8> to the message "VICTORIOUS" one gets the message "IVOTCIRSUO".
It was quickly noticed that being applied separately, both substitution cipher and permutation cipher were rather weak. But when being combined, they were strong enough for those times. Thus, the most important messages were first encrypted using substitution cipher, and then the result was encrypted using permutation cipher. Encrypting the message "VICTORIOUS" with the combination of the ciphers described above one gets the message "JWPUDJSTVP".
Archeologists have recently found the message engraved on a stone plate. At the first glance it seemed completely meaningless, so it was suggested that the message was encrypted with some substitution and permutation ciphers. They have conjectured the possible text of the original message that was encrypted, and now they want to check their conjecture. They need a computer program to do it, so you have to write one.
Input
Input contains two lines. The first line contains the message engraved on the plate. Before encrypting, all spaces and punctuation marks were removed, so the encrypted message contains only capital letters of the English alphabet. The second line contains the original message that is conjectured to be encrypted in the message on the first line. It also contains only capital letters of the English alphabet.
The lengths of both lines of the input are equal and do not exceed 100.
Output
Output "YES" if the message on the first line of the input file could be the result of encrypting the message on the second line, or "NO" in the other case.
 
Sample Input
JWPUDJSTVP
VICTORIOUS
 
Sample Output
YES
翻译:古罗马帝国有两种简单的加密算法,第一种按照顺序替换,例如把a-y分别替换成b-z,把z替换成a,这样可以把VICTORIOUS替换成WJDUPSJPVT。
第二种是打乱顺序消息的顺序,例如<2, 1, 5, 4, 3, 7, 6, 10, 9, 8>的含义就是把第二个字符放在第一位,而把第一位的字符放到第二位,然后是第5个字符,第4个字符,…,可以把VICTORIOUS替换成IVOTCIRSUO。
后来发现同时使用两种算法,加密效果更好。可以把VICTORIOUS替换成JWPUDJSTVP。
题目要求:能不能把第二行中的原文转换为第一行的密文。
解题思路:首先要找出规律,第二种算法只会改变每个字符的位置,但是不会影响每个字符在字符串中出现的次数。例如A在原来的字符串中出现3次,那么通过第二种算法它出现的次数还是3次。第一种算法虽然改变了字符串的内容,但是有些东西没有变化,例如原来字符串中的a、b、c出现的次数分别n1、n2、n3,假设abc替换def,则d、e、f出现的次数应该是n1、n2、n3。所以只要保证相对位置上的字符出现的次数相同即可实现转换。
 
算法:
统计输入信息第一行中每个字符出现的次数。使用长度为26的数组表示,分别表示字母A到字母Z出现的次数,使用int[] a表示。
统计输入信息第二行中的每个字符出现的次数。使用长度为26的数组表示,分别表示字母A到字母Z出现的次数,使用int[] b表示。
循环26次:
第j次循环中,再循环比较a[(i+j)%26]与b[i]是否相同,如果都相同则说明能够转换,输出YES即可,退出外层循环,否则继续循环。

如果26次循环完之后,没有得到结果,输出NO。

ACM编程竞赛代码实践详解 国际大学生程序设计竞赛(ACM-ICPC)是一项由国际计算机学会(ACM)主办的全球性算法竞赛。这一章将简要介绍ACM-ICPC的起源、竞赛模式和它在编程界的重要性。字符串处理技巧在编程竞赛中占有重要地位。理解和掌握基础的字符串匹配算法,如朴素匹配和KMP算法,以及字符串处理的高级技巧,如字符串哈希,对于解决复杂问题至关重要。在实际应用中,通过将这些算法与其他算法结合,可以优化问题的解决过程,提升代码的运行效率。在后续的章节中,我们将继续探讨ACM竞赛中其他重要的算法和数据结构的应用。 阅读详情

相关推荐

ACM C++代码加密工具

该程序分为加密和解密两个程序,是专门用于加密和解密代码的,可以防止ACM提交代码之后被查重,加密后的代码可以正常编译,提交到OJ上也可以正常AC

C - Message Decowding

C - Message Decowding Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description The cows are thrilled because they've just learned about

u013599426的专栏 1134

uniapp 使用摄像头 live-pusher (APP)

uniapp 中开发 app 时使用live-pusher踩过的坑

随身笔记 1万+

codeup2152: 加密C++

题目描述ACM俱乐部里面有些秘密文件(英文的),我们要把它进行加密。对每一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。输入输入有多组数据。每组数据一行,包含一个字符串(长度&lt;=1000),为需要加密的字符串。输出对应每组数据,输出加密后的字符串。样例输入I am a student. I love you.样例输出...

薄荷糖 343

DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)

本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。

mm9012的博客 1035

智驾域控制器硬件架构:从接口丛林到算力核心的工程解码

本文深入解析了智驾域控制器硬件架构的设计挑战与工程实践。面对复杂的接口丛林,文章详细探讨了如何高效融合摄像头、雷达等多源传感器数据,并构建以多SOC为核心的强大算力平台。同时,文章强调了电源、时钟、散热等最小系统及车规级可靠性设计的关键作用,为工程师提供了从接口驯服到算力核心协同的完整硬件解码指南。

happy2的博客 484

ACM典型试题--简单的加密算法(一)

1. 题目描述 简单的加密算法:把字符串中的字符替换成另外的字符,只有对方知道如何替换就可以 解密。要求根据给定的加密方法和密文,得到原始消息。 输入格式 第一行输入密钥,第二行输入密文。 输出格式 对输入的数据输出解密后的原始信息。 输入样例 eydbkmiqugjxlvtzpnwohracsf Kifq oua zarxa suar bti yaagrj fa xtf...

weixin_30909575的博客 715

华为OD机试2025C卷 - CPU调度策略 (C++ & Python & JAVA & JS & GO)

华为OD机试 2025C卷 CPU调度策略,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1297

ACM典型试题--古代密码(二)

1. 题目描述 古罗马帝国有两种简单的加密算法,第一种按照顺序替换,例如把a-y 分别替换成b-z, 把z 替换成a,这样可以把VICTORIOUS 替换成WJDUPSJPVT。 第二种是打乱顺序消息的顺序,例如的含义就是把第二个字 符放在第一位,而把第一位的字符放到第二位,然后是第5 个字符,第4 个字符,…,可以 把VICTORIOUS 替换成IVOTCIRSUO。 后来发现同时使

赵侠客 2607

图神经网络实战——总结 | 图神经网络展望

短短数年时间,图神经网络 (Graph Neural Networks, GNN) 已经成为一种重要的深度学习架构,并且已经广泛应用于各个行业。通过本专栏的学习,能够对图学习和 GNN 领域有一个全面的了解,并能为各种应用设计、构建GNN模型。

盼小辉丶的博客 8604

【DaVinci Developer专题】-28-Client Server Port Interface中useArgumentType、useArrayBaseType和useVoid介绍

共7页 目录 1 ImplPolicy = useArgumentType 2 ImplPolicy = useArrayBaseType 3 ImplPolicy = useVoid 4 三者代码差异部分 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键字: 缩略语/术语 含义 DEV DaVinci Developer

「汽车电子助手」的博客 1505

【ACM】C++程序设计ACM题库总结

浙江工业大学ACM部分题解析+代码

chenmeng的博客 4407

数仓建模—维度建模之维度表

首先要学会识别维度,维度是相对稳定的、可抽象具有共性的、固有的(天然的)描述度量或事实的上下文属性信息,失去维度信息的度量信息是没有意义的或者说是失去维度信息的事实表是没有意义的。其次要掌握维度表的设计原则和设计流程,从而更加科学的设计维度表,其实这些东西都是术,我们一直都说一句话大道至简,其实如果你掌握了精髓,抛开这些术也可以做到得心应手,这就像张无忌练太极剑一样,忘记了才能达到道的境界,也就是无我,如果做不到就记住这些原则加以应用从而达到术的境界。

2401_84052244的博客 4364

从ACM到蓝桥杯:HOJ多赛制配置详解(含OI/IOI模式实战演示)

本文详细解析了如何在开源在线评测系统HOJ中配置ACM、OI、IOI三大主流编程竞赛赛制。通过实战演示,重点介绍了ACM赛制的封榜与滚榜功能、OI/IOI赛制的子任务设计与评分策略,并分享了测试数据加密、异常提交处理等高级管理技巧,帮助竞赛教练与平台管理员高效搭建专业竞赛环境。

tcp8optimizer的博客 298

Spring Boot入门(03): 从零开始学习配置文件:掌握YAML和Properties,轻松应对多环境配置管理

在Spring Boot开发中,配置文件是非常重要的。本文将带领你从零开始学习配置文件,掌握YAML和Properties的语法,轻松应对多环境配置管理。无论是开发、测试还是生产环境,你都可以轻松切换不同的配置文件,并且能够灵活修改配置信息。

**My Coding Family** 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java sdut acm 2787 加密术

题目链接:点击打开链接 加密术 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 加密技术是一种常用的安全保密手段,利用加密技术可以把重要的数据变成经过加密变成乱码传送,到达目的地后再利用解密手段还原。现在我们发明了一种新的加密技术,即通过在

Annfan123的博客 811

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Alibaba ACM SDK for Python 使用教程

Alibaba ACM SDK for Python 使用教程 项目介绍 Alibaba ACM (Application Configuration Management) SDK for Python 是一个用于管理应用程序配置的开源项目。它允许开发者通过简单的 API 调用来管理配置,支持配置的动态更新,从而提高应用程序的灵活性和可维护性。ACM SDK for Python 提供了丰富的功...

gitblog_00115的博客 350

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Openjudge 1.8 25:螺旋加密

25:螺旋加密 查看 描述 Chip和Dale发明了一种文本信息加密技术。他们事先秘密约定好矩阵的行数和列数。接着,将字符按如下方式编码: 1. 所有文本只包含大写字母和空格。 2. 每个字符均赋予一个数值:空格=0,A=1,B=2,……,Y=25,Z=26。 按照下图所示的方式,将每个字符对应数值的5位二进制数依次填入矩阵。最后用0将矩阵补充完整。例如,对于信

Lucky_Glass的C++之旅 2821

ACM元老的密码

出于在通信中隐藏信息的需要,人类在很久以前就学会了对传递的信息加密。 由于古时多数人并不识字,最早的秘密书写的形式只用到纸笔或等同物品,随着识字率提高,就开始需要真正的密码学了。最古典的两个加密技巧是: 移位式(Transpositioncipher):将字母顺序重新排列,例如‘help me’变成‘ehplem’; 替代式(substitutioncipher):有

朝歌 966

利用ACM服务,快速申请免费的公有证书,你get到了吗?

大家好,我是是Dream呀,最近很多朋友在问Dream,你知道怎么利用ACM快速申请免费的公有整数吗?emmmm这个我确实是了解过,不过也还没有真正学习过。于是趁着这个机会,我立马学习了起来!经过一天的摸索前进,Dream终于是把这个东西从头到尾搞明白啦!

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 1万+
上一篇: ACM详解(7)——压缩与编码
下一篇: ACM详解(9)——其他
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值