等价表达式

小目标的最后一步。

原题链接:https://www.luogu.org/problem/show?pid=1054

精力不足,代码工作可能要放在后几天。。。

思路已经明确了,我说一下。

这道题的大意是给出若干表达式,问这些表达式的值和初始表达式的值是不是相等。

问题中给出了一个未知数a,这个a没有什么很好的解决办法, 通常的也是其他题解常用的那就是自己给a赋值,只要别赋0啊1啊-1之类的可能冲突概率大的值就好。

(可以赋一个妹子生日什么的增加RP

在说具体做法之前,我想我应该说一下一些细节问题。

1.判断输入的合法性,看样子输入里面有左右括号不相等的情况,输入时最好加一个判断。

2.算出来的答案可能会非常大,记得开longlong并且边算边取模。模数也得自己选,随便找一个大质数就好。

接下来是具体做法,表达式的处理。

通过输入样例可以判断,输入的是中缀表达式。一开始我想的是把中缀转后缀,然后代入求值并判断,不过后来我发现,首先,转后缀表达式的过程虽然好想但非常难写,其次,求中缀表达式有自己的方法,所以根本不需要转成后缀表达式。

接下来的问题就转化成了怎么求中缀表达式的值了。

正常向的方法是开两个栈,一个数字栈一个符号栈,顺序读入,遇到数字直接压入数字栈,遇到操作符时,并且这个运算符的优先级要低于之前一个,那就先把之前那个操作弹出来计算。

如果遇到左括号,就一直读,读到右括号时将括号内的表达式按照之前的规则求值。

最后再把栈里没算完的算完就是最后结果了。然后就是比对输出。

posted @ 2017-09-27 23:48  ShawnZhou_Aether  阅读(276)  评论(0编辑  收藏  举报