https://nanti.jisuanke.com/t/31443

题意

给出一个表达式,求最小值和最大值。

表达式中的运算符只有'+'、'-'、'*'、'd',xdy 表示一个 y 面的骰子 roll x 次的和,其中x>=0,y>=1,实际上它的最小值就是x,小于0时要强制变为0,最大值就是 x*y ,题目给的表达式保证运算都是合法的,并且中间过程和结果都是int范围内。

分析

表达式求值,多了一个d运算,维护最大最小值,在乘法的时候取所有极值的情况。

中序表达式->后序表达式(左->右):

数字:直接输出

运算符:将栈中所有优先级>=自己的运算符输出,之后入栈(栈为空就直接入栈)

(:入栈

):将之前所有运算符输出,直到遇到 '(' ,并且将 '('也输出

最后将栈中所有东西按顺序输出

后续表达式计算(左->右):

数字:入栈

运算符:取栈顶两个数字计算,结果入栈

遍历完后栈顶元素就是答案

#include<bits/stdc++.h>
using namespace std;
struct Node{
int type;
int num;
char op;
};
map<char,int>mp;
char str[];
stack<char> s;
queue<Node> que;
void postfix(){//中缀转后缀
int len = strlen(str);
for(int i=;i<len;i++){
if(isdigit(str[i])){
int num=;
while(i<=len&&isdigit(str[i])){
num=num*+str[i]-'';
i++;
}
que.push(Node{,num,''});
}
if(i>=len) break;
if(str[i]=='(') s.push(str[i]);
else if(str[i]==')'){
while(s.top()!='('){
que.push(Node{,,s.top()});
s.pop();
}
s.pop();
}else{
while(!s.empty()&&mp[s.top()]>=mp[str[i]]){
que.push(Node{,,s.top()});
s.pop();
}
s.push(str[i]);
}
}
while(!s.empty()){
que.push(Node{,,s.top()});
s.pop();
}
}
int main(){
mp['+']=mp['-']=;
mp['/']=mp['*']=;
mp['d']=;
while(~scanf("%s",str)){
postfix();
stack<int> small,big;
while(!que.empty()){//后缀计算
Node u = que.front();que.pop();
if(u.type==) small.push(u.num),big.push(u.num);
else{
int sb = small.top(); small.pop();
int sa = small.top(); small.pop();
int bb = big.top(); big.pop();
int ba = big.top(); big.pop();
if (u.op == '+')
sa += sb, ba += bb;
else if (u.op == '-')
sa -= bb, ba -= sb;
else if (u.op == '*') {
int minn = min(min(sa*sb, sa*bb), min(ba*sb, ba*bb));
int maxx = max(max(sa*sb, sa*bb), max(ba*sb, ba*bb));
sa = minn; ba = maxx;
}
else if (u.op == 'd') {
if (sa < )sa = ;
ba *= bb;
}
small.push(sa); big.push(ba);
}
}
printf("%d %d\n", small.top(), big.top());
}
return ;
}

ACM-ICPC 2018 沈阳赛区网络预赛 B Call of Accepted(表达式求值)的更多相关文章

  1. ACM-ICPC 2018 沈阳赛区网络预赛 B Call of Accepted(表达式求值)

    题目链接:https://nanti.jisuanke.com/t/31443 相关前置链接 https://www.cnblogs.com/dolphin0520/p/3708602.html ht ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)

    https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛-K:Supreme Number

    Supreme Number A prime number (or a prime) is a natural number greater than 11 that cannot be formed ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛-D:Made In Heaven(K短路+A*模板)

    Made In Heaven One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. ...

  5. 图上两点之间的第k最短路径的长度 ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven

    131072K   One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. Howe ...

  6. ACM-ICPC 2018 沈阳赛区网络预赛 J树分块

    J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...

  7. ACM-ICPC 2018 沈阳赛区网络预赛 K. Supreme Number

    A prime number (or a prime) is a natural number greater than 11 that cannot be formed by multiplying ...

  8. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph

    "Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...

  9. Fantastic Graph 2018 沈阳赛区网络预赛 F题

    题意: 二分图 有k条边,我们去选择其中的几条 每选中一条那么此条边的u 和 v的度数就+1,最后使得所有点的度数都在[l, r]这个区间内 , 这就相当于 边流入1,流出1,最后使流量平衡 解析: ...

随机推荐

  1. eclipse 开发web 项目,使用gradle 需要安装的插件

    1.Buildship Gradle 扩展 eclipse IDE 以支持使用 Gradle 构建软件.此解决方案由 Eclipse 基金会提供 2.EGradle Editor (主要用来编写gra ...

  2. 配置用户Log on as service

    Logon to the computer with administrative privileges. Open the ‘Administrative Tools’ and open the ‘ ...

  3. [十二省联考2019]D1T1异或粽子

    嘟嘟嘟 做这题之前,强烈推荐先把这道题切了P1631序列合并. 这两道题思路基本一模一样. 首先把异或处理成前缀异或,然后维护一个大根堆,每一次取出堆顶加到答案里面,然后把堆顶所在元素的次大的异或值放 ...

  4. 随心测试_数据库_002 <数据库系统组成>

    软测工程师:作为综合运用多学科知识,保障软件质量的重要岗位.需要我们学以致用,在工作中不断学习提升.以下:软测人员必备_数据库核心技能学习点,供大家学习参考. 数据库系统组成_必备 1. 简介:数据库 ...

  5. Facebook 广告投放相关概念简介(1)

    本文不涉及具体代码实现,仅对开发API的前置内容做简单介绍,想参考代码请绕行! 广告主(广告管理工具) ·需要推广自己的应用.网站.主页,所以有了广告管理工具 . ·一个广告主仅可拥有一个广告账户(可 ...

  6. nginx 的各种配置

    负载均衡 以上是ip的负载均衡,主要是保证 固定ip地址访问到固定服务,如果不做ip的匹配,那么每次请求的机器都不相同,就会出现问题,sessionid 之类的问题 //修改 路由负载均衡不能写has ...

  7. Win7删除右键菜单中“图形属性”和“图形选项”

    完win7操作系统后,打完驱动在桌面右键会出现如下两个选项,平时没啥用又占用空间,那么如何删掉这两个选项呢? 操作步骤: 1.在运行中输入 regedit 确定打开注册表: 2.依次单击展开HKEY_ ...

  8. React 精要面试题讲解(一) 单向数据流

    react 单向数据流概念 'react框架是怎样的数据流向?'||'react单向数据流是怎样的概念 ?' 解答这个问题之前,我们首先得知道,js框架是个怎样的概念. 框架:具备一定**编程思想** ...

  9. 【C语言】位运算

    编写一个函数getbits,从一个16位的单元中取出某几位(即该几位保留原值,其余位0).函数调用形式为getbits(value,n1,2).----简单题目遇到想不到的问题 c语言位运算经典问题: ...

  10. jmeter学习记录--10--二次开发环境搭建

    JMeter源码集成到Eclipse.JMeter二次开发(1)-eclipse环境配置及源码编译 ,根据此文章记录将jmeter源码集成到myecplise 第一步:下载jmeter源码http:/ ...