题目:这不是字符串题
问题描述:PTA | 程序设计类实验辅助教学平台
思路:这里的正整数 Ai (1≤Ai≤26),正好对应26个字母,所以可以映射成字符串去做,最后还原。
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long longsigned 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;
}