洛谷 P1054 等價表示式

2021-07-23 22:40:40 字數 2303 閱讀 8414

題目描述

明明進了中學之後,學到了代數表示式。有一天,他碰到乙個很麻煩的選擇題。這個題目的題幹中首先給出了乙個代數表示式,然後列出了若干選項,每個選項也是乙個代數表示式,題目的要求是判斷選項中哪些代數表示式是和題幹中的表示式等價的。

這個題目手算很麻煩,因為明明對計算機程式設計很感興趣,所以他想是不是可以用計算機來解決這個問題。假設你是明明,能完成這個任務嗎?

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

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

輸入輸出格式

輸入格式:

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

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

輸出格式:

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

輸入輸出樣例

輸入樣例#1:

( a + 1) ^2

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

a + 1+ a

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

輸出樣例#1:

ac 說明

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

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

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

2023年提高組第四題

思路就是列舉a的取值,比較計算結果是否相等。

坑點:

1 括號不匹配。

2 結果可能較大需要取模。

#include

#include

#include

#include

#include

using

namespace

std;

const

long

long md=1e9+7;

stack

long>num;

stack

sym;

int n,ans[35];

long

long stdd[35];

string s[35];

long

long pw(long

long x,long

long y)

string read()

return ss;

}bool cmp(char t)

void calc()

int main()

j--;

num.push(tmp);

}else

if(s[i][j]=='a')

num.push(k);

else

if(s[i][j]=='(')

sym.push(s[i][j]);

else

if(s[i][j]==')')

if(!sym.empty())

sym.pop();}}

else

}while(!sym.empty())

calc();

if(i==0)

else

num.pop();}}

if(!***&&i!=0)

ans[++ans[0]]=i;

}for(int i=1;i<=ans[0];i++)

printf("%c",ans[i]+'a'-1);

printf("\n");

return

0;}

P1054 等價表示式

目錄 實現 等價表示式 給出乙個表示式,求之後給出的與之等價的表示式。保證每個表示式最多只有乙個變數 a 可能有 運算。由於只有乙個變數,我們可以將 a 特殊值化,如果最終結果相同那麼判定兩式等價。為了減小誤差,我們可以多取幾個值,但是由於有乘方操作所以最好不要太大。之後就是中綴表示式的計算,我採用...

洛谷P1054等價表示式題解 zhengjun

題目描述 明明進了中學之後,學到了代數表示式。有一天,他碰到乙個很麻煩的選擇題。這個題目的題幹中首先給出了乙個代數表示式,然後列出了若干選項,每個選項也是乙個代數表示式,題目的要求是判斷選項中哪些代數表示式是和題幹中的表示式等價的。這個題目手算很麻煩,因為明明對計算機程式設計很感興趣,所以他想是不是...

洛谷 1054 NOIP2005 等價表示式

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