72pts求调
查看原帖
72pts求调
1121866
CleverLiu楼主2024/11/10 11:27

希望代码框架大致不变。球球。

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

string s;
int c, m, q;
stack <int> st;
int lr[3000006];

int dfs (int l, int r) {
	int temp = 0;
	int op = 0;
	for (int i = l; i <= r; i++) {
		if ('0' <= s[i] && s[i] <= '9') {
			temp = (temp << 1) + (temp << 3) + s[i] - '0';
		} else if (s[i] == '<') {
			op = 1;
		} else if (s[i] == '>')  {
			op = 2;
		} else if (s[i] == '?') {
			if (op == 1) {
				if (c < temp) {
					temp = dfs (i + 1, lr[i] - 1);
					break;
				} else {
					temp = dfs (lr[i] + 1, r);
					break;
				}
			} else {
				if (c > temp) {
					temp = dfs (i + 1, lr[i] - 1);
					break;
				} else {
					temp = dfs (lr[i] + 1, r);
					break;
				}
			}
		}
	}
	return temp;
}

signed main () {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
//	freopen ("in.txt", "r", stdin);
//	freopen ("out.txt", "w", stdout);
	cin >> m >> q;
	cin >> s;
	for (int i = 0; i < (int)s.size(); i++) {
		if (s[i] == '?') {
			st.push(i);
		} else if (s[i] == ':') {
			lr[st.top()] = i;
			st.pop();
		}
	}
	while (q--) {
		cin >> c;
		cout << dfs (0, (int)s.size() - 1) << '\n';
	}

	return 0;
}
2024/11/10 11:27
加载中...