首页 > 其他分享 >B - Bracket Sequence题解

B - Bracket Sequence题解

时间:2022-11-19 20:57:11浏览次数:100  
标签:sta Sequence int 题解 top pop st Bracket ans

B - Bracket Sequence

思路:
用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作。对于最外层的数,是没有计算的。
所以最后要单独判断栈是不是空的,如果不是空的,还要把这些数弹出来进行计算。
想差了一点,应该是计算完一个括号之后,应该把这个数放到栈中,然后再去计算下一个括号。

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

const int mod = 1e9 + 7;
int n;
string st;
stack<int> sta;
int flag;

signed main(){
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> st;
        if(st[0] =='('){
            sta.push(-1);
            flag ++;
        }
        else if(st[0] == ')'){
            if(flag & 1){
                int ans = 1;
                while(!sta.empty() && sta.top() != -1){
                    int x = sta.top();
                    ans = ans * x % mod;
                    sta.pop();
                }
                if(!sta.empty() &&sta.top() == -1) sta.pop();
                sta.push(ans);
            }
            else{
                int ans = 0;
                while(!sta.empty() && sta.top() != -1){
                    int x = sta.top();
                    sta.pop();
                    ans = (ans + x) % mod;
                }
                if(!sta.empty() && sta.top() == -1) sta.pop();
                sta.push(ans);
            }
            flag --;
        }
        else{
            int x = 0, y;
            for(int j = 0; j < st.size(); j++){
                y = (int)(st[j] - '0');
                x = x * 10 + y;
            }
            //cout << x << endl;
            sta.push(x);
        }
    }
    while(sta.size() > 1){
        int x = sta.top(); sta.pop();
        int y = sta.top(); sta.pop();
        sta.push((x + y)%mod);
    }
    cout << sta.top();
    return 0;
}

标签:sta,Sequence,int,题解,top,pop,st,Bracket,ans
From: https://www.cnblogs.com/N-lim/p/16907006.html

相关文章

  • Auxiliary Set题解
    FAuxiliarySet树上LCA+DFS注意一下输出格式!#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intt,n,q,ans;intfa[N];//存储点i的......
  • 广东工业大学第十六届程序设计竞赛题解(部分)
    E爬塔方法一:二分做法预处理每个点所能到达的最远距离,存到vector里边,然后二分处理结果#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn,......
  • F - Subarrays题解
    F-Subarrays题意:给你一个序列,问这个序列里有多少个子串的和能被k整除。思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串。因为求的是前缀和,......
  • G water testing题解
    Gwatertesting题意:给你一个多边形(可能是凸多边形,也可能是凹多边形),问该多边形内有多少个整数点(不包含边界)。思路:皮克定理+叉乘计算三角形面积:皮克定理是指一个计算点......
  • Frogger题解
    Frogger法一:floyd#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<iomanip>#defineintlonglongintusingn......
  • 2022 zafu校赛题解
    A煎饼哥哥好鲨题读入时,分别统计四种不同提交结果,最后按题目要求输出即可。代码链接B富哥磊神暴力枚举三种纸币的数量,统计合法付款方式的数量即可。注意优化暴力枚举......
  • python(牛客)试题解析2 - 中等
    导航一、NC192二叉树的后序遍历二、NC117 合并二叉树三、求长度最长的的连续子序列使他们的和等于sum四、按顺序取出固定长度内容并合并两个数组为一个新数组五、输......
  • python 安装Basemap 以及cannot import name ‘dedent’ from ‘matplotlib.cbook’问
    我用的是anaconda管理工具,运行安装condainstallbasemap或者直接在anaconda,navigator中搜索basemap,进行安装  问题:cannotimportname‘dedent’from‘matplot......
  • 11.19考试题解
    记录一下爆炸的模拟赛。T1原题,这道题的题解之前写过,在这。T2由于边数接近点数,整个图的形态接近树,想到建出原图的一个生成树(任意一个),这样两个点的距离分为两类:只经过......
  • 牛客小白月赛 61 题解
    前言以下内容转自官方首先,十分抱歉给大家带来了不好的比赛体验,下面是比赛中出的大锅。锅1:B题是出题人在读CSAPP时想到的一道小模拟,但在题目描述时出了问题,应该......