Description

A math instructor is too lazy to grade a question in the exam papers in which students are supposed to produce a complicated formula for the question asked. Students may write correct answers in different forms which makes grading very hard. So, the instructor needs help from computer programmers and you can help.

You are to write a program to read different formulas and determine whether or not they are arithmetically equivalent.

Input

The first line of the input contains an integer N (1 <= N <= 20) that is the number of test cases. Following the first line, there are two lines for each test case. A test case consists of two arithmetic expressions, each on a separate line with at most 80 characters. There is no blank line in the input. An expression contains one or more of the following:

  • 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

Your program must produce one line for each test case. If input expressions for each test data are arithmetically equivalent, "YES", otherwise "NO" must be printed as the output of the program. Output should be all in upper-case characters.

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
  1. #include <cstring>
  2. #include <string>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <cmath>
  7. #include <vector>
  8. #include <cstdlib>
  9. #include <iostream>
  10. #include <stack>
  11. #include <map>
  12. #define max2(a,b) ((a) > (b) ? (a) : (b))
  13. #define min2(a,b) ((a) < (b) ? (a) : (b))
  14. using namespace std;
  15. map<char,int>m;
  16. string transform(string s)    //转化为后缀表达式
  17. {
  18. int len=s.length();
  19. char c[100];
  20. int top=0;
  21. stack<char>exp;
  22. for(int i=0;i<len;i++)
  23. {
  24. if(isalnum(s[i])) c[top++]=s[i];
  25. else
  26. {
  27. switch(s[i])
  28. {
  29. case '(':
  30. exp.push(s[i]);
  31. break;
  32. case ')':
  33. while(exp.top()!='(')
  34. {
  35. c[top++]=exp.top();
  36. exp.pop();
  37. }
  38. exp.pop();
  39. break;
  40. case '+':
  41. case '-':
  42. case '*':
  43. while(!exp.empty()&&m[s[i]]<=m[exp.top()])
  44. {
  45. c[top++]=exp.top();
  46. exp.pop();
  47. }
  48. exp.push(s[i]);
  49. }
  50. }
  51. }
  52. while(!exp.empty())
  53. {
  54. c[top++]=exp.top();
  55. exp.pop();
  56. }
  57. c[top]='\0';
  58. string temp=c;
  59. return temp;
  60. }
  61. int cal(string s)
  62. {
  63. int len=s.length();
  64. stack<int>c;
  65. for(int i=0;i<len;i++)
  66. {
  67. if(isalnum(s[i]))
  68. {
  69. if(isdigit(s[i]))
  70. c.push(s[i]-'0');
  71. else
  72. c.push(s[i]);
  73. }
  74. else
  75. {
  76. int a=c.top();
  77. c.pop();
  78. int b=c.top();
  79. c.pop();
  80. switch(s[i])
  81. {
  82. case '+':c.push(b+a);
  83. break;
  84. case '-':c.push(b-a);
  85. break;
  86. case '*':c.push(b*a);
  87. }
  88. }
  89. }
  90. return c.top();
  91. }
  92. int main()
  93. {
  94. int t;
  95. string s1,s2;
  96. m['(']=0;
  97. m['+']=m['-']=1;
  98. m['*']=2;
  99. cin>>t;
  100. getchar();
  101. while(t--)
  102. {
  103. getline(cin,s1);
  104. getline(cin,s2);
  105. string t1=transform(s1);
  106. string t2=transform(s2);
  107. int ans1=cal(t1);
  108. int ans2=cal(t2);
  109. if(ans1==ans2)
  110. cout<<"YES"<<endl;
  111. else
  112. cout<<"NO"<<endl;
  113. }
  114. return 0;
  115. }

Problem K 栈的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)

    6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...

  9. 华农oj Problem K: 负2进制【有技巧构造/待补】

    Problem K: 负2进制 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 51 Solved: 6 [Submit][Status][Web Boa ...

随机推荐

  1. [css] line-height

    原文:http://www.zhangxinxu.com/wordpress/2009/11/css%E8%A1%8C%E9%AB%98line-height%E7%9A%84%E4%B8%80%E4 ...

  2. Http报头Accept与Content-Type的区别

    Http报头Accept与Content-Type的区别 1.Accept属于请求头, Content-Type属于实体头. Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http ...

  3. 三大平衡树(Treap + Splay + SBT)总结+模板[转]

    Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...

  4. @responseBody注解的使用

    1. @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML 数 ...

  5. latex输入希腊字母

    \alpha产生字符α;\beta产生字符β:\gamma产生字符γ:\delta产生字符δ;\epsilon产生字符ε; \zeta产生字符ζ:\eta产生字符η;\theta产生字符9; \iot ...

  6. 转!! Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  7. 转!Java关键字final、static使用总结

    Java关键字final.static使用总结   一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可 ...

  8. android动画小析

    这里所讲的动画,是android framework提供的动画框架里面的动画. 是view层级的动画.不涉及到底层opengl es相关的动画实现. 动画: 主要包括 Interpolation du ...

  9. CentOS 6.x启动时网卡eth0未激活

    简述 安装CentOS 6.x操作系统后,开机时发现没有网络,最后发现系统启动时未激活网卡 - 因为只有在激活状态的网卡才能去连接网络,进行网络通讯. 简述 激活网卡eth0 激活网卡eth0 执行& ...

  10. (15)odoo配置文件详解

    openerp-server.conf ---------------- [options]; addons模块的查找路径addons_path = E:\GreenOdoo8.0\source\op ...