1 条题解

  • 0
    @ 2025-8-24 21:18:19

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar wangxiaochai
    老骥伏枥

    搬运于2025-08-24 21:18:18,当前版本为作者最后更新于2025-04-08 19:40:26,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    感觉之前的题解写复杂了……

    这题的算法标签是“栈”。但是按照栈先进后出的原则,没办法让公式从左到右计算,需要对栈进行转置才行。

    那直接用“队列”不就好了?队列不就正好是先进先出嘛。因为涉及到对队尾和队首同时操作,所以本题选择用双向队列来存储数据。

    剩下按照题意模拟一遍即可。因为乘法和除法是一样的优先级,加法和减法是一样的优先级,所以为了代码简洁,可以使用三元运算符。

    #include <iostream>
    #include <vector>
    #include <deque>
    using namespace std;
    
    int x;
    char c;
    vector <char> op;
    deque <int> q;
    
    int main()
    {
        cin >> x;
        q.push_back(x);
        while (cin >> c >> x)
        {
            if (c=='*' || c=='/')
            {
                x = c=='*'? x*q.back() : q.back()/x;
                q.pop_back();
                q.push_back(x);
            } else
            {
                op.emplace_back(c);
                q.push_back(x);
            }
        }
        x = q.front();
        for (auto p : op)
        {
            q.pop_front();
            x = p=='+'? x+q.front() : x-q.front(); 
        }
        cout << x;
        return 0;
    }
    
    • 1

    [蓝桥杯青少年组国赛 2023] 简单算术题

    信息

    ID
    11856
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者