西南民大oj 1762 我的式子不可能那么难写 【波兰式】
描述
现在老总想让你帮他儿子写个简单计算器(他儿子小学3年级,嘘!),写不出来就扣奖金。。快帮他写吧。。。
输入
一行字符串(长度小于200)
所有参与运算的数字都为小于1000正整数。
表达式中存在空格。
数据保证合法。
输出
样例输入
1+2
3+(5-6/(1+2)+10)*8
样例输出
3
107
提示
←_←
话说我的样例很良心啊。
思路:很久以前西南民大比赛做过的题,其实就是给你一个表达式让你求值,我们可以先将它变成波兰式,然后波兰式求值就简单多了
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stack>
#define maxn 100009
using namespace std;
stack<char>q;
stack<long long>p;
long long priorit[],ans[maxn],h;
bool opp[maxn];
char ch[maxn];
int main()
{
priorit[(int)'+']=priorit[(int)'-']=;
priorit[(int)'*']=priorit[(int)'/']=;
priorit[(int)'(']=;
while(gets(ch+)!=NULL)
{
while(!q.empty())q.pop();
while(!p.empty())p.pop();
h=;
memset(ans,,sizeof(ans));
memset(opp,,sizeof(opp));
long long len=strlen(ch+),idx=,j=;
for(int i=;i<=len;i++)
{
if(ch[i]!=' ')ch[j++]=ch[i];
}
len=j-;
while(idx<=len)
{
long long num=,flag=;
while(ch[idx]>=''&&ch[idx]<=''&&idx<=len)
{
num=num*+ch[idx++]-'';
flag=;
}
if(flag==)
{
if(ch[idx]=='(')q.push('(');
else if(ch[idx]==')')
{
while(!q.empty()&&q.top()!='(')
{
ans[++h]=-(long long)q.top();
opp[h]=;
q.pop();
}
q.pop();
}
else
{
while(!q.empty()&&priorit[(long long)q.top()]>=priorit[(int)ch[idx]])
{
ans[++h]=-(int)q.top();
opp[h]=;
q.pop();
}
q.push(ch[idx]);
}
}
else
{
ans[++h]=num;
}
if(flag==)idx++;
}
while(!q.empty())
{
ans[++h]=-(long long)q.top();
opp[h]=;
q.pop();
}
for(int i=;i<=h;i++)
{
// printf("%I64d ",ans[i]);
if(opp[i]==)p.push(ans[i]);
else
{
long long u=p.top();
p.pop();
long long v=p.top();
p.pop();
if(ans[i]==-(int)'-')p.push(v-u);
if(ans[i]==-(int)'+')p.push(u+v);
if(ans[i]==-(int)'*')p.push(u*v);
if(ans[i]==-(int)'/')p.push(v/u);
}
}
if(!p.empty())printf("%I64d\n",p.top());
else printf("0\n");
}
}
西南民大oj 1762 我的式子不可能那么难写 【波兰式】的更多相关文章
- 西南民大oj(两园交求面积)
西南民大oj:http://www.swunacm.com/acmhome/welcome.do?method=index 我的几何不可能那么可爱 时间限制(普通/Java) : 1000 MS/ 3 ...
- 西南民大oj(递推)
我的数学不可能那么难推 时间限制(普通/Java) : 3000 MS/ 9000 MS 运行内存限制 : 65536 KByte总提交 : 49 测试通过 : ...
- 西南民大oj(矩阵快速幂)
我的名字不可能那么难记 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 16 测试通过 : ...
- 民大OJ 1668 追杀系列第二发
追杀系列第二发 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 57 测试通过 : 16 ...
- 各大Oj平台介绍 刷题平台
https://leetcode.com/ http://www.cnblogs.com/lzmfywz/archive/2012/02/07/2342010.html 1.题库与网站资源题库-在线提 ...
- 各大Oj平台介绍
1.题库与网站资源题库-在线提交系统(Online Judge)简介 下面是几个比较大的在线提交系统(OnlineJudge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有P ...
- 蓝桥杯练习-各大OJ平台介绍
校赛准备的不够充分,简单题失分太遗憾, 有幸参加到省赛,这次先码一下练习平台,等学期结束忙完之后好好练习! 1.题库与网站资源题库-在线提交系统(Online Judge)简介 下面是几个比较大的 ...
- 国外、国内各大OJ
下面是几个比较大的在线提交系统(Online Judge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有Pascal/C/C++/Java)写好源代码提交即可,会实时返 回信息告 ...
- 各大Oj平台介绍[转]
1.题库与网站资源题库-在线提交系统(Online Judge)简介 下面是几个比较大的在线提交系统(OnlineJudge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有P ...
随机推荐
- windows下Mongodb和Memcached安装笔记
MongoDB安装: D:\ProgramFiles\MongoDBServer3.2\bin\mongod --dbpath D:\mongoData D:\ProgramFiles\MongoDB ...
- mysql IF语句使用
类似于三元运算符 1) IF(where,result1,result2) = where?result1:result2 例如 SELECT IF(1=1,1,2) => 1 2) ...
- 关于bootstrap栅格系统的五等分以及八等分代码
众所周知,bootstrap的栅格系统是基于十二等分的,今天拿到设计的设计稿一看,发现一个图片list上只有8张图片,然后上网查资料,发现只能自己写css代码实现,故写博客记录代码. 以下是八等分的代 ...
- 五、Pandas玩转数据
Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...
- 使用bat脚本调用py文件直接获取应用的包名和targetversion
背景: 在上一篇已经介绍过如何利用python调用aapt获取包名 https://www.cnblogs.com/reseelei-despair/p/11078750.html 但是因为每次都要修 ...
- Bootstrap历练实例:超小的按钮
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- Eclipse调试:Run on server 和 Debug on server 区别
Run on server: 以正常模式运行程序.会直接把程序从头到尾执行一遍,运行完就结束,不会进入到源代码里面(即使源代码中设置了断点). Debug on server: 以调试模式运行程序,或 ...
- MFC学习小结
2019/1/13 视频来源 一. MFC框架中一些重要的函数 1. InitInstance函数 应用程序类的一个虚函数,MFC应用程序的入口.初始化的作用. 2. PreCreateWindo ...
- std::ios::sync_with_stdio和tie()——给cin加速
平时在Leetcode上刷题的时候,总能看到有一些题中最快的代码都有这样一段 static const auto init = []() { std::ios::sync_with_stdio(fal ...
- memory bist lib
model NVIC_REG6T_1024x32(resetb,margin,clk,en,we,addr,d,q) ( bist_definition( clock clk high; chip_e ...