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 ...
随机推荐
- 转:C语言中的static变量和C++静态数据成员(static member)
转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量 a.静态局部变量在函数内定义,生存期为整个程序 ...
- mysql使用笔记(三)
一.数值类型 1. 数值类型 标准sql中包含数据类型 INTEGER, SMALLINT, DECIMAL, NUMERIC,以及FLOAT, REAL, DOUBLE.mysql在此基础上 ...
- UnicodeEncodeError
UnicodeEncodeError at /admin/shop/product/add/ 'ascii' codec can't encode characters in position 0-1 ...
- angular-file-upload 中文API
github地址: https://github.com/nervgh/angular-file-upload Directives(指令) nv-file-drop <!-- 最少配置 --& ...
- commonJS — 数组操作(for Array)
for Array github: https://github.com/laixiangran/commonJS/blob/master/src/forArray.js 代码 /** * Creat ...
- Falcon:三代reads比对组装工具箱
主页:github: PacificBiosciences/FALCON 简介 Falcon是一组通过快速比对长reads,从而来consensus和组装的工具. Falcon工具包是一组简单的代码集 ...
- mysql 免安装版本 命令安装
1.down load mysql-5.5.28-win32.zip 2.unzip it to a path such as d:/mysq/mysql-5.5.28-win32 3.copy th ...
- NodeJS几个值得学习的开源框架
1.Primus Primus,是Transformer的创造者,并且也被称为通用包装器实时框架.Primus里包含了大量的用于Node.js的实时框架,并 且它们都拥有各种不同的实时功能.此外,Pr ...
- Sublime Text 3编辑器安装
一.安装Sublime Text 3 到Sublime Text 3官网下载最新版本:http://www.sublimetext.com/3 一路Next下去即可完成安装.安装完Sublime Te ...
- [bootstrap] 栅格系统和布局
1.简介 栅格系统(grid systems),也称为“网格系统”,运用固定的格子设计版面布局,风格工整简洁.是从平面栅格系统演变而来. Bootstrap建立在12列栅格系统.布局.组件之上.以规则 ...