2026年山东省【信息学体验营】复赛真题及题解T1:星际密信
题目描述
在遥远的星系中,外星人使用一种简单的加密方式传递信息。
已知外星人的信息全部都是由大写英文字母(A,…,Z)和数字字符(0,…,9)构成的字符串。
加密规则如下:
- 对于每个英文字母(大写),将它替换为字母表中向后移动k kk位的字母(循环)。
- 对于数字字符,保持不变。
例如,字符串ABC2在k = 3 k=3k=3时加密为DEF2;在k = − 3 k=-3k=−3时加密为XYZ2。
现在,你截获了一段原文和一个整数k kk。
请你根据这个规则加密原文,输出加密后的密文。
输入格式
第一行:n nn和k kk,n nn表示字符串的长度,整数k kk表示位移量(正数表示字母向后移动,负数表示向前移动,0 00表示不移动)。
第二行一个长度为n nn的字符串s ss,仅包含大写字母和数字字符。
输出格式
输出一行字符串,表示加密后的结果。
输入输出样例 1
输入 1
12 3 HELLOWORLD88输出 1
KHOORZRUOG88【数据范围】
对于所有测试数据,保证1 ≤ n ≤ 10 5 1\le n\le 10^51≤n≤105,− 10 9 ≤ k ≤ 10 9 -10^9\le k\le 10^9−109≤k≤109。
| 测试点编号 | k kk | 特殊性质 |
|---|---|---|
| 1 ∼ 10 1\sim 101∼10 | 0 ≤ k ≤ 10 0\le k\le 100≤k≤10 | 无 |
| 11 ∼ 20 11\sim 2011∼20 | − 10 9 ≤ k ≤ 10 9 -10^9\le k\le 10^9−109≤k≤109 | 无 |
思路分析
本题要求根据位移量 (k) 对字符串中的大写字母进行循环移位加密,数字保持不变。关键在于处理 k 可能为负数且绝对值很大的情况。
- 核心操作:对于每个字符:
- 若是数字(
'0'~'9'),直接保留。 - 若是大写字母(
'A'~'Z'),将其转换为 0~25 的整数索引,加上位移量 k 后对 26 取模,再转换回字母。
- 若是数字(
- 取模处理:由于 k 的范围为[ − 10 9 , 10 9 ] [-10^9, 10^9][−109,109],直接取模即可,但需处理负数的模运算。C++ 中
%对负数结果为负,因此使用((c - 'A' + k) % 26 + 26) % 26确保结果非负,或者直接(c - 'A' + k % 26 + 26) % 26(因为k % 26可能为负,加 26 再取模)。 - 时间复杂度:O(n),n ≤ 10 5 n \le 10^5n≤105,完全可行。
代码实现
#include<iostream>#include<string>usingnamespacestd;intn,k;string s;intmain(){cin>>n>>k;// 读入长度和位移cin>>s;// 读入字符串// 预处理 k 对 26 取模intshift=k%26;// 可能为负,在计算时再处理for(charc:s){if(c>='0'&&c<='9'){cout<<c;// 数字不变}else{// 大写字母// 计算偏移后的索引,确保结果在 [0, 25]intidx=(c-'A'+shift)%26;if(idx<0)idx+=26;// 处理负数取模cout<<char('A'+idx);}}cout<<endl;return0;}更多内容请关注专栏:信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转
2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转
https://edu.csdn.net/course/detail/41081 点击跳转
3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:
GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转
GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转
GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}