问题描述:PTA | 程序设计类实验辅助教学平台
思路:这里的正整数 Ai (1≤Ai≤26),正好对应26个字母,所以可以映射成字符串去做,最后还原。
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n, m; cin >> n >> m;
string s;
for(int i = 1; i <= n; i++){
int x;cin >> x;
s += char('a' + x - 1);
}
while(m--){
int op; cin >> op;
if(op == 1){
int x; cin >> x;
int len = x;
string t;
while(x--){
int k; cin >> k;
t += char('a' + k - 1);
}
int x2; cin >> x2;
int len2 = x2;
string t2;
while(x2--){
int k; cin >> k;
t2 += char('a' + k - 1);
}
if(s.find(t) == string :: npos){
continue;
}else{
s.replace(s.find(t), len, t2);
}
}else if(op == 2){
string ne;
for(int i =0; i < s.length() - 1; i++){
int x1 = s[i] - 'a' + 1, x2 = s[i + 1] - 'a' + 1;
if((x1 + x2) % 2 == 0){
ne += s[i];
ne += char((x1 + x2) / 2 + 'a' - 1);
}else{
ne += s[i];
}
}
ne += s[s.length()-1];
s = ne;
}else{
int l, r; cin >> l >> r;
reverse(s.begin() + l - 1, s.begin() + r); // 题目A数组从0开始
}
}
for(int i = 0; i < s.length(); i++){
int x = (s[i] - 'a' + 1);
if(i != s.length() - 1)cout << x << " ";
else cout << x;
}
return 0;
}