1 条题解

  • 0
    @ 2026-10-26 23:48:27

    思路与算法

    循环栈维护变量生存期、空循环层数和有效n因子层数;扫描中始终检查语法,即使空循环体也不得重复变量或括号失配。

    正确性说明

    常数到n的非空循环提供一个n因子,n到n或常数区间提供常数因子,n到常数或反向常数区间不执行。只在全部外层有效时累积n因子,顺序程序复杂度由最大有效嵌套因子数决定。栈的压入弹出同时精确跟踪变量存活,故两类语法错误均被识别。

    复杂度

    每程序O(L)时间、O(L+26)空间,含变量表初始化及声明复杂度解析。

    易错点

    不可把不执行的循环体语法错误忽略;E过多或F未关闭均ERR,退出作用域后同名变量可以重新使用。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    struct F {
        char v;
        bool dead, add;
    };
    int main() {
        int T;
        cin >> T;
        while (T--) {
            int L;
            string claimed;
            cin >> L >> claimed;
            int want = claimed == "O(1)" ? 0 : stoi(claimed.substr(4, claimed.size() - 5));
            vector<F> st;
            int used[26] = {}, dead = 0, power = 0, best = 0;
            bool err = false;
            for (int i = 0; i < L; i++) {
                char c;
                cin >> c;
                if (c == 'F') {
                    char v;
                    string a, b;
                    cin >> v >> a >> b;
                    err |= used[v - 'a'] > 0;
                    used[v - 'a']++;
                    bool empty = (a == "n" && b != "n") || (a != "n" && b != "n" && stoi(a) > stoi(b));
                    bool add = !dead && !empty && a != "n" && b == "n";
                    st.push_back({v, empty, add});
                    dead += empty;
                    power += add;
                    best = max(best, power);
                } else if (st.empty())
                    err = true;
                else {
                    auto f = st.back();
                    st.pop_back();
                    used[f.v - 'a']--;
                    dead -= f.dead;
                    power -= f.add;
                }
            }
            err |= !st.empty();
            cout << (err ? "ERR" : best == want ? "Yes" : "No") << "\n";
        }
    }
    
    • 1

    信息

    ID
    1937
    时间
    1000ms
    内存
    256MiB
    难度
    普及−
    标签
    递交数
    0
    已通过
    0
    上传者