70分求调
查看原帖
70分求调
890062
loss_of_time楼主2023/6/6 14:55
#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;
}
2023/6/6 14:55
加载中...