社区讨论
话说这题暴力是得不了满分吗
P11186三目运算参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m273dtdu
- 此快照首次捕获于
- 2024/10/13 12:35 去年
- 此快照最后确认于
- 2025/11/04 17:18 4 个月前
RT,还是我家string常数太大了?
CPP#include <iostream>
#include <stack>
using namespace std;
const int N = 2e6 + 5;
int m, q;
string S;
int mat[N];
int to_num(const string &s) {
int num = 0;
for (int i = 0; i < s.size(); i++)
if ('0' <= s[i] && s[i] <= '9')
num = num * 10 + s[i] - '0';
return num;
}
int analysis(int x, int l, int r) {
//cout << "analysis(" << l << ", " << r << "): ";
//cout << S.substr(l, r - l) << "...\n";
if (S[l] != 'x')
return to_num(S.substr(l, r - l));
string sub;
int t1 = 0;
for (int i = l; i < r; i++) {
if (S[i] == '?') { t1 = i; break; }
sub += S[i];
}
int num = to_num(sub), op = sub[1];
int t2 = mat[t1];
if (op == '<' && x < num) return analysis(x, t1 + 1, t2);
if (op == '>' && x > num) return analysis(x, t1 + 1, t2);
return analysis(x, t2 + 1, r);
}
int main() {
ios::sync_with_stdio(false), cin.tie(0);
//freopen("expr4.in", "r", stdin);
//freopen("expr.out", "w", stdout);
cin >> m >> q;
cin >> S;
stack<int> sta;
for (int i = 0; i < S.size(); i++) {
if (S[i] == '?')
sta.push(i);
else if (S[i] == ':')
mat[sta.top()] = i, sta.pop();
}
while (q--) {
int x;
cin >> x;
cout << analysis(x, 0, S.size()) << '\n';
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...