等價表示式 解題報告

2021-08-08 17:41:49 字數 2072 閱讀 7302

等價表示式【noip2005提高組】

time limit:10000ms  memory limit:65536k

description

明明進了中學之後,學到了代數表示式。有一天,他碰到乙個很麻煩的選擇題。這個題目的題幹中首先給出了乙個代數表示式,然後列出了若干選項,每個選項也是乙個代數表示式,題目的要求是判斷選項中哪些代數表示式是和題幹中的表示式等價的。這個題目手算很麻煩,因為明明對計算機程式設計很感興趣,所以他想是不是可以用計算機來解決這個問題。假設你是明明,能完成這個任務嗎?

這個選擇題中的每個表示式都滿足下面的性質:

1、表示式只可能包含乙個變數『a』。

2、表示式中出現的數都是正整數,而且都小於10000。

3、表示式中可以包括四種運算『+』(加),『-』(減),『*』(乘),『^』(乘冪),以及小括號『(』,『)』。小括號的優先順序最高,其次是『^』,然後是『*』,最後是『+』和『-』。『+』和『-』的優先順序是相同的。相同優先順序的運算從左到右進行。(注意:運算子『+』,『-』,『*』,『^』以及小括號『(』,『)』都是英文本元)

4、冪指數只可能是1到10之間的正整數(包括1和10)。

5、表示式內部,頭部或者尾部都可能有一些多餘的空格。

下面是一些合理的表示式的例子:

((a^1) ^ 2)^3

a*a+a-a

((a+a))

9999+(a-a)*a

1 + (a -1)^3

1^10^9……

input

輸入檔案equal.in的第一行給出的是題幹中的表示式。第二行是乙個整數n(2 <= n <= 26),表示選項的個數。後面n行,每行包括乙個選項中的表示式。這n個選項的標號分別是a,b,c,d……

輸入中的表示式的長度都不超過50個字元,而且保證選項中總有表示式和題幹中的表示式是等價的。

output

輸出檔案equal.out包括一行,這一行包括一系列選項的標號,表示哪些選項是和題幹中的表示式等價的。選項的標號按照字母順序排列,而且之間沒有空格。

sample input

( a + 1) ^2

3(a-1)^2+4*a

a + 1+ a

a^2 + 2 * a * 1 + 1^2 + 10 -10 +a -a

sample outputac

hint

【資料規模】

對於30%的資料,表示式中只可能出現兩種運算子『+』和『-』;

對於其它的資料,四種運算子『+』,『-』,『*』,『^』在表示式中都可能出現。

對於全部的資料,表示式中都可能出現小括號『(』和『)』。

這一題如果試圖對表示式進行化簡,難度是很大的。因此我們可以列舉一些數值並代入表示式,如果對於多個數兩表示式的值都相等,就可以判斷它們等價。

當然,對於c++程式設計師來說,讀入要花一番功夫;因為資料有空格,必須忽略,這裡有兩種方法:1、讀入時去除;2、運算時忽略。我用了第一種。但對於pascal的程式設計師來說則比較方便,可以讀入之後用delete函式去除空格即可。

**:

#include

#include

#include

#include

#include

using namespace std; long long num[51]; char sign[51]; int last[51]; string read1() //讀入 int calculate(string s,int a) //表示式求值過程 else if (s[i]=='a') num[++n]=a; else bool p=false; while (!p) } p=false; while (!p) else if (sign[j]=='/') } p=false; while (!p) else if (sign[j]=='-') } return num[1]; } int main() if (!p) cout<

表示式解題報告

題目描述 表示式6 9 42對於十進位制來說是錯誤的,但是對於十三進製來說是正確的。即6 13 9 13 42 13 而42 13 4 131 2 130 54 10 你的任務是寫一段程式讀入3個整數p q和r,然後確定乙個進製b 2 b 16 使得p q r。如果b有很多選擇,輸出最小的乙個。例如...

等價表示式

noip2005 提高組 這題我沒有使用逆波蘭表示式,而是一種更為顯而易見的分治 通過優先順序最低的運算子,分治成左右兩部分,之後合併。完整 如下 超長 include include include include include using namespace std const int max...

等價串 解題報告

牛客小白月賽4 f等價串 解題報告 題目描述 一串長度為 n 的字串 a 和一串長度為 m 的字串 b。並且這兩串字串只會含有 0 或 1 鐵子可以對字串 a 執行兩種操作,兩種操作可以執行任意次。操作1 無情替換 鐵子可以用 11 替換掉 0 也可以用 00 替換掉 1 操作2 極限刪除 鐵子可以...