ACM-ICPC 2018 沈阳赛区网络预赛 B Call of Accepted(表达式求值)
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(表达式求值)的更多相关文章
- ACM-ICPC 2018 沈阳赛区网络预赛 B Call of Accepted(表达式求值)
题目链接:https://nanti.jisuanke.com/t/31443 相关前置链接 https://www.cnblogs.com/dolphin0520/p/3708602.html ht ...
- ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)
https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...
- 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 ...
- 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. ...
- 图上两点之间的第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 ...
- 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 ...
- 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 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph
"Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...
- Fantastic Graph 2018 沈阳赛区网络预赛 F题
题意: 二分图 有k条边,我们去选择其中的几条 每选中一条那么此条边的u 和 v的度数就+1,最后使得所有点的度数都在[l, r]这个区间内 , 这就相当于 边流入1,流出1,最后使流量平衡 解析: ...
随机推荐
- OpenGL Windows 窗口程序环境搭建
OpenGL环境搭建步骤: Downloading OpenGL 根据官网的说法: In all three major desktop platforms (Linux, macOS, and Wi ...
- VS code 中的各种变量 ${file},${fileBasename}
VS code 中的各种变量 ${file},${fileBasename} 2017年08月24日 11:14:07 bailsong 阅读数:7108 from: https://blog. ...
- 《SQL CookBook 》笔记-第一章-检索记录
目录 第一章 检索记录 1.1检索所有行和列 1.2筛选行 1.3查找满足多个查询条件的行 1.4筛选列 1.5创建列的别名 1.6 在where子句中引用别名列 1.7 串联多列的值 1.8 在se ...
- C# -- 使用Ping检查网络是否正常
C# -- 使用Ping检查网络是否正常 需引用命名空间: using System.Net.NetworkInformation; 1. 代码实现 try { List<string> ...
- LeetCode算法题-Longest Word in Dictionary(Java实现)
这是悦乐书的第303次更新,第322篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第171题(顺位题号是720).给出表示英语词典的字符串单词数组,找到单词中长度最长的单 ...
- LinuxMint(Ubuntu)安装文泉驿家族黑体字
文泉驿黑体字家族在Ubuntu上很有用,可以解决系统字体发虚的问题. 通过下面的三条命令安装: sudo apt-get install ttf-wqy-microhei #文泉驿-微米黑 sudo ...
- Web Storage:浏览器端数据储存机制
目录 概述 操作方法 存入/读取数据 清除数据 遍历操作 storage事件 参考链接 概述 这个API的作用是,使得网页可以在浏览器端储存数据.它分成两类:sessionStorage和localS ...
- DEDECMS 漏洞修复方案
目录 DEDECMS支付模块注入漏洞 漏洞文件: /include/payment/alipay.php 漏洞描述: 对输入参数$_GET['out_trade_no']未进行严格过滤 修复方案: 对 ...
- JavaScript match()方法和正则表达式match()
先介绍参数为普通字符串的使用方式,此时match方法的返回值是存放首次匹配内容的数组.如果没有找到匹配结果,返回null.语法结构: 1 str.match(searchvalue)参数解析:(1). ...
- nginx正向代理和反正代理区别
1)正向代理:客户端 <一> 代理 一>服务端 客户端访问不到服务端,所以找了代理,由代理帮忙访问到了服务端 2)反向代理:客户端 一>代理 <一> 服务端 客户端 ...