满分题解

C班-范浩宇  •  1个月前


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

typedef pair<int, int> PCI;
const int N = 110;
int tt;

PCI stk[N];

int get_number(string str)
{

    int res = 0;
    for (int c = 0; c < str.size(); c++)
        res = res * 10 + str[c] - '0';
    return res;
}

int get_time(string str)
{

    if (str == "O(1)")
        return 0;
    int t = str.find('^');
    string num = str.substr(t + 1);
    num.erase(num.end() - 1);
    return get_number(num);
}

bool has(char c)
{

    for (int i = 1; i <= tt; i++)
        if (stk[i].first == c)
            return true;
    return false;
}

int get_cmp(string x, string y)
{

    if (x == "n")
    {
        if (y == "n")
            return 0;
        return -1;
    }

    if (y == "n")
        return 1;
    int a = get_number(x), b = get_number(y);
    if (a <= b)
        return 0;
    return -1;
}

int main()
{

    int T;
    scanf("%d", &T);

    while (T--)
    {
        int n;
        string str;
        cin >> n >> str;
        int tm = get_time(str);

        int max_cmp = 0;
        bool error = false;
        tt = 0;
        string line;
        getline(cin, line);
        for (int i = 0; i < n; i++)
        {
            getline(cin, line);
            if (!error)
                if (line == "E")
                    if (tt)
                        tt--;
                    else
                        error = true;
                else
                {
                    stringstream sin(line);
                    string F, i, x, y;
                    sin >> F >> i >> x >> y;

                    if (has(i[0]))
                        error = true;
                    else
                    {
                        int cmp = get_cmp(x, y);
                        if (!tt)
                            stk[++tt] = {i[0], cmp};
                        else
                        {
                            int computation = -1;
                            if (stk[tt].second >= 0 && cmp >= 0)
                                computation = stk[tt].second + cmp;
                            stk[++tt] = {i[0], computation};
                        }
                        max_cmp = max(max_cmp, stk[tt].second);
                    }
                }
        }

        if (tt)
            error = true;

        if (error)
            cout << "ERR\n";
        else if (tm == max_cmp)
            cout << "Yes\n";
        else
            cout << "No\n";
    }

    return 0;
}

要是没有AC我恰翔!


评论: