2 条题解

  • 1
    @ 2026-9-5 12:01:14
    using namespace std;
    const int MOD = 10007;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        int L; string s;
        cin >> L;
        getline(cin, s);      // 吃掉换行
        getline(cin, s);      // L=0 时第二行为空串,必须用 getline
    
        vector<pair<int,int>> ops;   // 操作数栈 (ways0, ways1)
        vector<char> stk;            // 运算符栈(含 '(')
    
        auto apply = [&](char op) {
            auto b = ops.back(); ops.pop_back();
            auto a = ops.back(); ops.pop_back();
            int w0, w1;
            if (op == '*') {         // ×:结果为 1 当且仅当两边都为 1
                w0 = (a.first*b.first + a.first*b.second + a.second*b.first) % MOD;
                w1 = (a.second*b.second) % MOD;
            } else {                 // +:结果为 0 当且仅当两边都为 0
                w0 = (a.first*b.first) % MOD;
                w1 = (a.first*b.second + a.second*b.first + a.second*b.second) % MOD;
            }
            ops.push_back({w0, w1});
        };
    
        bool expectOperand = true;
        for (char c : s) {
            if (c == '(') { stk.push_back(c); continue; }
            if (expectOperand) { ops.push_back({1,1}); expectOperand = false; }
            if (c == ')') {
                while (!stk.empty() && stk.back() != '(') { apply(stk.back()); stk.pop_back(); }
                if (!stk.empty()) stk.pop_back();          // 弹 '('
                expectOperand = false;
            } else if (c == '*') {
                stk.push_back('*');
                expectOperand = true;
            } else {                                       // '+'
                while (!stk.empty() && stk.back() == '*') { apply(stk.back()); stk.pop_back(); }
                stk.push_back('+');
                expectOperand = true;
            }
        }
        if (expectOperand) ops.push_back({1,1});           // 末尾变量
        while (!stk.empty()) { apply(stk.back()); stk.pop_back(); }
    
        cout << ops.back().first % MOD << '\n';
        return 0;
    }
    
    
    

    信息

    ID
    717
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    10
    已通过
    3
    上传者