[R19C]字符串操作

大模拟 照着题意写就是了

// 111. [R19C]字符串操作.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
[R19C]字符串操作
原题地址:https://bs.daimayuan.top/p/111
题目描述
apiadu 有一个仅由小写字母组成字符串,他需要对字符串进行 Q 次操作。
第 i 次操作都需要找到字符串中从左往右数的第 xi 个指定字符 ci,然后把这个字符移动到字符串的最前面。
每次操作都会改变字符串,下一次操作将在改变后的字符串上进行。你要帮 apiadu 输出所有操作完成后的字符串。
输入格式
第一行包含一个非负整数 n,表示字符串的长度。
第二行包含初始字符串 s。
第三行包含非负整数 Q,表示操作次数。
接下来 Q 行,每行给出一个操作,包含一个整数 xi 和一个字符 ci。
保证字符串中 ci 的数量不少于 xi。
输出格式
输出一个字符串,表示经过所有操作后的最终字符串。
样例输入
6
banana
3
2 a
1 n
1 a
样例输出
anbana
样例解释
初始:banana。
找到第2个 a(第 4 个字符),移动后:abanna。
找到第1个 n(第 4 个字符),移动后:nabana。
找到第1个 a(第 2 个字符),移动后:anbana。
数据范围与提示
对于 40% 的数据,1 <= n <= 100。
对于 100% 的数据,1 <= n,Q <= 1000,字符串仅由小写字母组成,且每次操作都能找到对应的字符。
*/
#include <iostream>
#include <string>
#include <algorithm>


using namespace std;

string str;
int n, m;


void solve(int t, char c) {
	int cnt = 0;
	for (int i = 0; i < str.size(); i++) {
		if (c == str[i]) {
			cnt++;
		}
		if (cnt == t) {
			str.erase(str.begin() + i);
			str.insert(str.begin(), c);
			return;
		}
	}

	return;
}




int main()
{
	cin >> n >> str >> m;
	for (int i = 0; i < m; i++) {
		int t; char c; cin >> t >> c;
		solve(t, c);
	}
	cout << str << endl;

}

posted on 2025-07-09 19:51  itdef  阅读(49)  评论(0)    收藏  举报

导航