icontofig | 发布于 2019-07-09 00:21:56 | 阅读量 175 | 模拟
发布于 2019-07-09 00:21:56 | 模拟

题解

这道题如果会C++ STL的话会方便许多,当然也可以手写,不过可能要麻烦一点点。

首先考虑运算符的运算顺序,肯定是x和/先进行运算了。

那么我们就先将+和-操作丢进双端队列里面,等待最后运算。

然后我们还要设置一个保存数字的双端队列,且要保证此队列任何时候都有数字。

这样当我们遇到x和/的时候,就把队尾元素取出和下一个数字进行运算,然后再压入队尾。

最后处理+和-操作就可以了。

代码

#include <bits/stdc++.h>
using namespace std;
int n;
string s;
deque<int>x;
deque<char>y;
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for(int i = 1;i <= n;++i){
        cin >> s;
        while(!x.empty())x.pop_back();
        while(!y.empty())y.pop_back();
        x.push_back(s[0] - '0');
        for(int j = 1;j < 7;j += 2){
            if(s[j] == 'x' || s[j] == '/'){
                int now = x.back();
                x.pop_back();
                if(s[j] == 'x'){
                    now *= (s[j+1] - '0');
                    x.push_back(now);
                }
                else{
                    now /= (s[j+1] - '0');
                    x.push_back(now);
                }
            }
            else{
                y.push_back(s[j]);
                x.push_back(s[j+1] - '0');
            }
        }
        int cnt = 0;
        while(!y.empty()){
            char ch = y.front();
            y.pop_front();
            int x1 = x.front();
            x.pop_front();
            int x2 = x.front();
            x.pop_front();
            if(ch == '+'){
                x.push_front(x1+x2);
            }
            else x.push_front(x1-x2);
        }
        cnt = x.front();
        x.pop_front();
        if(cnt == 24)cout << "Yes" << endl;
        else cout << "No" << endl;
    }
    return 0;
}



内容更新于: 2019-07-09 00:21:58
链接地址: http://blog.leanote.com/post/icontofig/ae39f0350363

上一篇: BAPC18 I In Case of an Invasion,Please... 最短路+离散化+二分+最大流

下一篇: URL映射 CSP201803 T3

175 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航