小目標的最后一步。
原題鏈接:https://www.luogu.org/problem/show?pid=1054
精力不足,代碼工作可能要放在后幾天。。。
思路已經明確了,我說一下。
這道題的大意是給出若干表達式,問這些表達式的值和初始表達式的值是不是相等。
問題中給出了一個未知數a,這個a沒有什么很好的解決辦法, 通常的也是其他題解常用的那就是自己給a賦值,只要別賦0啊1啊-1之類的可能沖突概率大的值就好。
(可以賦一個妹子生日什么的增加RP
在說具體做法之前,我想我應該說一下一些細節問題。
1.判斷輸入的合法性,看樣子輸入里面有左右括號不相等的情況,輸入時最好加一個判斷。
2.算出來的答案可能會非常大,記得開longlong并且邊算邊取模。模數也得自己選,隨便找一個大質數就好。
接下來是具體做法,表達式的處理。
通過輸入樣例可以判斷,輸入的是中綴表達式。一開始我想的是把中綴轉后綴,然后代入求值并判斷,不過后來我發現,首先,轉后綴表達式的過程雖然好想但非常難寫,其次,求中綴表達式有自己的方法,所以根本不需要轉成后綴表達式。
接下來的問題就轉化成了怎么求中綴表達式的值了。
正常向的方法是開兩個棧,一個數字棧一個符號棧,順序讀入,遇到數字直接壓入數字棧,遇到操作符時,并且這個運算符的優先級要低于之前一個,那就先把之前那個操作彈出來計算。
如果遇到左括號,就一直讀,讀到右括號時將括號內的表達式按照之前的規則求值。
最后再把棧里沒算完的算完就是最后結果了。然后就是比對輸出。