NOIP2005 等價表示式

2022-09-06 14:27:19 字數 2513 閱讀 8734

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

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

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……  對於30%的資料,表示式中只可能出現兩種運算子『+』和『-』;  對於其它的資料,四種運算子『+』,『-』,『*』,『^』在表示式中都可能出現。  對於全部的資料,表示式中都可能出現小括號『(』和『)』。

輸入的第一行給出的是題幹中的表示式。第二行是乙個整數n(2  < =  n  < =  26),表示選項的個數。後面n行,每行包括乙個選項中的表示式。這n個選項的標號分別是a,b,c,d……    輸入中的表示式的長度都不超過50個字元,而且保證選項中總有表示式和題幹中的表示式是等價的。

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

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

ac

/*

字串處理,注意運算子順序,注意int,long long 不要打反

*/#include

#include

#include

#include

#include

#define ll long long

#define fo(i,l,r) for(int i = l;i <= r;i++)

#define fd(i,l,r) for(int i = r;i >= l;i--)

using

namespace

std;

const

int maxn = 2050

;char s[30

][maxn];

bool vis[30

];ll n,ans1,ans2,sed,mod;

ll read();

while(ch>='

0'&&ch<='

9');

return x*f;

}bool is_them(char a,char b,char

c)ll q_mul(ll a,ll b,ll p)

return

ret;

}ll q_pow(ll a,ll b,ll p)

return

ret;

}ll str2int(

char *s,int l,int

r) ll n = 0

;

for(int i=l;i<=r;i++)

returnn;}

ll calc(

char *exp,int l,int

r) }

}if(lv < 0 && exp[r] == '

)') return calc(exp,l,r-1

);

else

if(lv > 0 && exp[r] == '

(') return calc(exp,l+1

,r);

if(p==-1

)else

; }

return0;

}bool tst(int

id)

return

ok;}

intmain()

sed = 6

; mod = 70177

; ans1 = calc(s[0],1,strlen(s[0]+1

));

for(int i = 1;i <= n;i++)

sed = 131

; mod = 92311

; ans1 = calc(s[0],1,strlen(s[0]+1

));

for(int i = 1;i <= n;i++)

for(int i = 1;i <= n;i++)

return0;

}

NOIP2005 等價表示式

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

NOIP 2005 等價表示式

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

NOIP 2005 等價表示式 題解

昨天覆習了一下表示式 棧 和圖論相關的演算法,結果卡在一道題上,上午做的等價表示式,下午才有所進展,最後好不容易寫出來了個像樣的程式,但又因為落谷和codevs上資料有誤 左右括號不匹配導致r re,例如 a 2 2 折騰半天,最後到vijos上也只是分多了點,也沒a掉。兩個棧是肯定的,乙個用來儲存...