社区讨论

70分求调

P1575正误问题参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo2hb0r6
此快照首次捕获于
2023/10/23 13:50
2 年前
此快照最后确认于
2023/10/23 13:50
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

stack<int> val;
stack<int> op;
int mp[256];
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int t, p, a, b;
    char c, pre = ' ';
    op.push(0);
    mp['t'] = 1, mp['f'] = 0, mp['o'] = 2, mp['a'] = 3, mp['n'] = 4;
    while ((c = getchar()) != '\n' && c != EOF) {
        if (pre == ' ' && c != ' ') {
            t = mp[c];
            if (t > 1) {
                while (op.top() > t) {
                    p = op.top(), op.pop();
                    if (p == 4)
                        if (val.size())
                            a = val.top(), val.pop(), val.push(!a);
                        else {
                            cout << "error";
                            goto end;
                        }
                    if (p == 3)
                        if (val.size() > 1)
                            a = val.top(), val.pop(), b = val.top(), val.pop(),
                            val.push(a && b);
                        else {
                            cout << "error";
                            goto end;
                        }
                }
                op.push(t);
            } else
                val.push(t);
        }
        pre = c;
    }
    while (op.size() > 1) {
        t = op.top(), op.pop();
        switch (t) {
        case 2:
            if (val.size() > 1)
                a = val.top(), val.pop(), b = val.top(), val.pop(),
                val.push(a || b);
            else {
                cout << "error";
                goto end;
            }
            break;
        case 3:
            if (p == 3)
                if (val.size() > 1)
                    a = val.top(), val.pop(), b = val.top(), val.pop(),
                    val.push(a && b);
                else {
                    cout << "error";
                    goto end;
                }
            break;
        case 4:
            if (val.size())
                a = val.top(), val.pop(), val.push(!a);
            else {
                cout << "error";
                goto end;
            }
            break;
        }
    }
    cout << (val.top() ? "true" : "false");
end:
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...