题目:这不是字符串题

问题描述: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;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值