有一个问题
查看原帖
有一个问题
1039923
_Accepted_100楼主2024/10/14 16:31

关于我没开1e7+10的数组然后RE的故事。

现在72pts求调。

求更优做法或优化

#include <bits/stdc++.h>
using namespace std;

const int N = 1e7 + 10;
int m, q, len, lower[N];
int v[N], cnt;
char s[N], c[N];

int change(int i, int j) {
	int val = 0;
	for (; i < len; i++) {
		if (s[i] < '0' or s[i] > '9') break;
		else val = val * 10 + (s[i] - '0');
	}
	v[j] = val;
	return i - 1;
}

inline void init() {
	stack <int> stac;
	len = strlen(s);
	int Len = 0;
	for (int i = 0; i < len; i++) {
		if (s[i] >= '0' and s[i] <= '9') {
			i = change(i, Len);
			c[Len++] = ' ';
		} else if (s[i] != 'x') {
			c[Len++] = s[i];
			if (s[i] == '?') stac.push(Len);
			if (s[i] == ':') {
				lower[stac.top() - 1] = Len - 1;
				stac.pop();
			}
		}
	}
}

int main() {
	ios :: sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> m >> q;
	cin >> s;
	init();
	len = strlen(c);
	while (q--) {
		int val;
		cin >> val;
		for (int i = 0; i < len; i++) {
			if (c[i] == '>') {
				if (val > v[i + 1]) i += 2;
				else i = lower[i + 2];
			}
			if (c[i] == '<') {
				if (val < v[i + 1]) i += 2;
				else i = lower[i + 2];
			}
			if (c[i] == ' ') {
				cout << v[i] << endl;
				break;
			}
		}
	}
	return 0;
}

还有最后的#19~#25与#17~#18只有 mm 的大小的不同,可是感觉我的时间复杂度也没有与 mm 有关啊。

2024/10/14 16:31
加载中...