1. 程式人生 > >[NOIP 2011普及組 No.4] 表達式的值

[NOIP 2011普及組 No.4] 表達式的值

nbsp span family 計算 com 說明 center info 再計算

[NOIP 2011普及組 No.4] 表達式的值

【問題描述】

  對於1 位二進制變量定義兩種運算:

    技術分享圖片

  運算的優先級是:
    1. 先計算括號內的,再計算括號外的。
    2. “×”運算優先於“⊕”運算,即計算表達式時,先計算×運算,再計算⊕運算。
  例如:計算表達式A⊕B × C 時,先計算B × C,其結果再與A 做⊕運算。
  現給定一個未完成的表達式,例如_+(_*_),請你在橫線處填入數字0 或者1,請問有多少種填法可以使得表達式的值為0。

【輸入】

  第1 行為一個整數L,表示給定的表達式中除去橫線外的運算符和括號的個數。
  第2 行為一個字符串包含L 個字符,其中只包含’(’、’)’、’+’、’*’這4 種字符,其中’(’、’)’是左右括號,’+’、’*’分別表示前面定義的運算符“⊕”和“×”。這行字符按順序給出了給定表達式中除去變量外的運算符和括號。

【輸出】

  輸出包含一個整數,即所有的方案數。註意:這個數可能會很大,請輸出方案數對10007 取模後的結果。

【輸入輸出樣例1】

輸入:

4
+(*)

輸出:

3

【輸入輸出樣例說明】

給定的表達式包括橫線字符之後為:_+(_*_)
在橫線位置填入(0、0、0)、(0、1、0)、(0、0、1)時,表達式的值均為0,所以共有3種填法。

【數據範圍】

對於20%的數據有0 ≤L≤ 10。
對於50%的數據有0 ≤L≤ 1,000。
對於70%的數據有0 ≤L≤ 10,000。
對於100%的數據有0 ≤L≤ 100,000。
對於50%的數據輸入表達式中不含括號。

[NOIP 2011普及組 No.4] 表達式的值