2022年蓝桥杯省赛C++c组真题 G题消除游戏

70 阅读1分钟

1.消除游戏 - 蓝桥云课 (lanqiao.cn)

按要求模拟了一下,能过给的两个样例,但是过不了后台数据:

#include <bits/stdc++.h>
using namespace std;
string s;
const int N = 1e6 + 10;
int cnt[N];
int flag, index;

void solve() {

	for (int i = 1; i < s.size() - 1; i++) {
		if (s[i - 1] == s[i] && s[i] != s[i + 1]) {
			//删除后两个
			cnt[i] = cnt[i + 1] = -1;

		} else if (s[i] == s[i + 1] && s[i] != s[i - 1]) {
			//删除前两个
			cnt[i - 1] = cnt[i] = -1;

		}
	}

	for (int i = 0; i < s.size(); i++) {
		if (cnt[i] == 0) {
			flag = 1;
			index = cnt[i];
		}
	}
	if (flag)
		cout << s[index];
	else {
		cout << "EMPTY" << endl;
		return;
	}
}

int main() {
	cin >> s;
	solve();
	return 0;
}

因为n是1e6,所以我们必须要写一个O(n)的算法。