Problem K 栈
Description
You are to write a program to read different formulas and determine whether or not they are arithmetically equivalent.
Input
- Single letter variables (case insensitive).
- Single digit numbers.
- Matched left and right parentheses.
- Binary operators +, - and * which are used for addition, subtraction and multiplication respectively.
- Arbitrary number of blank or tab characters between above tokens.
Note: Expressions are syntactically correct and evaluated from left to right with equal precedence (priority) for all operators. The coefficients and exponents of the variables are guaranteed to fit in 16-bit integers.
Output
Sample Input
- 3
- (a+b-c)*2
- (a+a)+(b*2)-(3*c)+c
- a*2-(a+c)+((a+c+e)*2)
- 3*a+c+(2*e)
- (a-b)*(a-b)
- (a*a)-(2*a*b)-(b*b)
Sample Output
- YES
- YES
- NO
- #include <cstring>
- #include <string>
- #include <cstdio>
- #include <algorithm>
- #include <queue>
- #include <cmath>
- #include <vector>
- #include <cstdlib>
- #include <iostream>
- #include <stack>
- #include <map>
- #define max2(a,b) ((a) > (b) ? (a) : (b))
- #define min2(a,b) ((a) < (b) ? (a) : (b))
- using namespace std;
- map<char,int>m;
- string transform(string s) //转化为后缀表达式
- {
- int len=s.length();
- char c[100];
- int top=0;
- stack<char>exp;
- for(int i=0;i<len;i++)
- {
- if(isalnum(s[i])) c[top++]=s[i];
- else
- {
- switch(s[i])
- {
- case '(':
- exp.push(s[i]);
- break;
- case ')':
- while(exp.top()!='(')
- {
- c[top++]=exp.top();
- exp.pop();
- }
- exp.pop();
- break;
- case '+':
- case '-':
- case '*':
- while(!exp.empty()&&m[s[i]]<=m[exp.top()])
- {
- c[top++]=exp.top();
- exp.pop();
- }
- exp.push(s[i]);
- }
- }
- }
- while(!exp.empty())
- {
- c[top++]=exp.top();
- exp.pop();
- }
- c[top]='\0';
- string temp=c;
- return temp;
- }
- int cal(string s)
- {
- int len=s.length();
- stack<int>c;
- for(int i=0;i<len;i++)
- {
- if(isalnum(s[i]))
- {
- if(isdigit(s[i]))
- c.push(s[i]-'0');
- else
- c.push(s[i]);
- }
- else
- {
- int a=c.top();
- c.pop();
- int b=c.top();
- c.pop();
- switch(s[i])
- {
- case '+':c.push(b+a);
- break;
- case '-':c.push(b-a);
- break;
- case '*':c.push(b*a);
- }
- }
- }
- return c.top();
- }
- int main()
- {
- int t;
- string s1,s2;
- m['(']=0;
- m['+']=m['-']=1;
- m['*']=2;
- cin>>t;
- getchar();
- while(t--)
- {
- getline(cin,s1);
- getline(cin,s2);
- string t1=transform(s1);
- string t2=transform(s2);
- int ans1=cal(t1);
- int ans2=cal(t2);
- if(ans1==ans2)
- cout<<"YES"<<endl;
- else
- cout<<"NO"<<endl;
- }
- return 0;
- }
Problem K 栈的更多相关文章
- Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...
- Codeforces 1089K - King Kog's Reception - [线段树][2018-2019 ICPC, NEERC, Northern Eurasia Finals Problem K]
题目链接:https://codeforces.com/contest/1089/problem/K time limit per test: 2 seconds memory limit per t ...
- Gym 101981K - Kangaroo Puzzle - [玄学][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem K]
题目链接:http://codeforces.com/gym/101981/problem/K Your friend has made a computer video game called “K ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
Problem K. UTF-8 Decoder 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c702 ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem K. KMC Attacks 交互题 暴力
Problem K. KMC Attacks 题目连接: http://codeforces.com/gym/100714 Description Warrant VI is a remote pla ...
- XVII Open Cup named after E.V. Pankratiev Grand Prix of Moscow Workshops, Sunday, April 23, 2017 Problem K. Piecemaking
题目:Problem K. PiecemakingInput file: standard inputOutput file: standard outputTime limit: 1 secondM ...
- 2018 Multi-University Training Contest 4 Problem K. Expression in Memories 【模拟】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6342 Problem K. Expression in Memories Time Limit: 200 ...
- HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)
6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...
- 华农oj Problem K: 负2进制【有技巧构造/待补】
Problem K: 负2进制 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 51 Solved: 6 [Submit][Status][Web Boa ...
随机推荐
- css 颜色渐变
.top_nav { width: 100%; height: 29px; /* 如果浏览器不支持渐变,使用图像作为背景 */ background: u ...
- hiho_1066_并查集
题目大意 给出N个操作,每个操作可能为两种类型之一: 1. 认定两个人属于同一个组织 2. 查询两个人是否是同一个组织 要求对于每个操作类型2,给出结果,即查询的两个人是否属于同一个组织.其中,任何人 ...
- git服务器搭建
http://blog.sina.com.cn/s/blog_904dee7f0101gait.html http://www.centoscn.com/image-text/install/2014 ...
- java 反射机制的实例
[案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /** * 通过一个对象获得完整的包名和类名 ...
- JSP action elements - JavaBean
语法 描述 jsp:include 在页面被请求的时候引入一个文件. jsp:useBean 寻找或者实例化一个JavaBean. jsp:setProperty 设置JavaBean的属性. jsp ...
- 能源项目xml文件 -- app-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- java中的异常和处理
算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...
- Uva---10881 Piotr's Ants(蚂蚁)
Problem DPiotr's AntsTime Limit: 2 seconds "One thing is for certain: there is no stopping them ...
- javaSE基础之记事本编程
首先安装好jdk和jre,之后进行如下操作: 1. 将代码记事本---->cmd--->javac 文件名.java ----->java 文件名 如图: 2. 关于记事本文件属性的 ...
- Merge k Sorted Lists [LeetCode]
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. S ...