社区讨论

话说这题暴力是得不了满分吗

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 条回复,欢迎继续交流。

正在加载回复...