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

  1. 3
  2. (a+b-c)*2
  3. (a+a)+(b*2)-(3*c)+c
  4. a*2-(a+c)+((a+c+e)*2)
  5. 3*a+c+(2*e)
  6. (a-b)*(a-b)
  7. (a*a)-(2*a*b)-(b*b)

Sample Output

  1. YES
  2. YES
  3. NO
  4.  
  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 颜色渐变

    .top_nav {     width: 100%;     height: 29px;            /* 如果浏览器不支持渐变,使用图像作为背景 */     background: u ...

  2. hiho_1066_并查集

    题目大意 给出N个操作,每个操作可能为两种类型之一: 1. 认定两个人属于同一个组织 2. 查询两个人是否是同一个组织 要求对于每个操作类型2,给出结果,即查询的两个人是否属于同一个组织.其中,任何人 ...

  3. git服务器搭建

    http://blog.sina.com.cn/s/blog_904dee7f0101gait.html http://www.centoscn.com/image-text/install/2014 ...

  4. java 反射机制的实例

    [案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect;   /**  * 通过一个对象获得完整的包名和类名 ...

  5. JSP action elements - JavaBean

    语法 描述 jsp:include 在页面被请求的时候引入一个文件. jsp:useBean 寻找或者实例化一个JavaBean. jsp:setProperty 设置JavaBean的属性. jsp ...

  6. 能源项目xml文件 -- app-context.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. java中的异常和处理

    算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...

  8. Uva---10881 Piotr's Ants(蚂蚁)

    Problem DPiotr's AntsTime Limit: 2 seconds "One thing is for certain: there is no stopping them ...

  9. javaSE基础之记事本编程

    首先安装好jdk和jre,之后进行如下操作: 1. 将代码记事本---->cmd--->javac 文件名.java ----->java 文件名 如图: 2. 关于记事本文件属性的 ...

  10. Merge k Sorted Lists [LeetCode]

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. S ...