2026年山东省【信息学体验营】复赛真题及题解T1:星际密信
2026/9/8 18:13:39 网站建设 项目流程

2026年山东省【信息学体验营】复赛真题及题解T1:星际密信

题目描述

在遥远的星系中,外星人使用一种简单的加密方式传递信息。

已知外星人的信息全部都是由大写英文字母(A,…,Z)和数字字符(0,…,9)构成的字符串。

加密规则如下:

  1. 对于每个英文字母(大写),将它替换为字母表中向后移动k kk位的字母(循环)。
  2. 对于数字字符,保持不变。

例如,字符串ABC2k = 3 k=3k=3时加密为DEF2;在k = − 3 k=-3k=3时加密为XYZ2

现在,你截获了一段原文和一个整数k kk

请你根据这个规则加密原文,输出加密后的密文。

输入格式

第一行:n nnk kkn 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^51n105− 10 9 ≤ k ≤ 10 9 -10^9\le k\le 10^9109k109

测试点编号k kk特殊性质
1 ∼ 10 1\sim 101100 ≤ k ≤ 10 0\le k\le 100k10
11 ∼ 20 11\sim 201120− 10 9 ≤ k ≤ 10 9 -10^9\le k\le 10^9109k109

思路分析

本题要求根据位移量 (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^5n105,完全可行。

代码实现

#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;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询