专栏文章
题解:B4303 [蓝桥杯青少年组省赛 2024] 字母移位
B4303题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipnuygs
- 此快照首次捕获于
- 2025/12/03 15:03 3 个月前
- 此快照最后确认于
- 2025/12/03 15:03 3 个月前
思路
根据题意,我们知道,左移表示 ASCII 码相减,右移表示 ASCII 码相加,所以将左移记为负,右移记为正。
根据题意,我们发现:
若 为奇,第 个字符的 ASCII 码变化为 ;
若 为偶,第 个字符的 ASCII 码变化为 。
因为 ,暴力会超时,所以用后缀和进行优化,时间复杂度 ,可以通过此题。
具体细节看代码吧!
根据题意,我们发现:
若 为奇,第 个字符的 ASCII 码变化为 ;
若 为偶,第 个字符的 ASCII 码变化为 。
因为 ,暴力会超时,所以用后缀和进行优化,时间复杂度 ,可以通过此题。
具体细节看代码吧!
代码
CPP#include<bits/stdc++.h>
using namespace std;
string s;
int n,a[100005];
int main(){
cin>>n>>s;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=n;i>=1;--i){
a[i]-=a[i+1]-26;
a[i]%=26;
//后缀和
//为了后面计算方便,取模一下吧!
//取模时注意避免负数
}
for(int i=1;i<=n;++i){
if(i%2)s[i-1]=(s[i-1]-'a'-a[i]+26)%26+'a';//为奇,减
else s[i-1]=(s[i-1]-'a'+a[i]+26)%26+'a';//为偶,加
//注意取模,注意避免负数
}
cout<<s<<"\n";
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...