NOIP2011 表示式求值

2021-08-17 20:59:39 字數 1070 閱讀 5867

這道題一看就跟正常表示式求值差不多,我們需要一步一步儲存前一部分的得0和得1的方案數,然後再與後面的進行運算,求出下個狀態的方法總數,看到這裡,很多朋友肯定想到了動態規劃,然而如何儲存運算順序呢,那就要用到中綴表示式轉字尾表示式,再按照運算順序進行計算,下面是**:

#include

#include

#include

#include

#include

#include

const

int maxn=100000;

const

int mod=10007;

using

namespace

std;

char ss[maxn+100],s[maxn+100];

int l,top,a[maxn+100],b[maxn+100];

void add()

void multiply()

int main()

s[++top]=tmp;

break;

}case

'*':

default:

top--;

break;}}

}if(top>0 && ss[l-1]!=')')

a[++a[0]]=1,b[a[0]]=1;

while(top>0)

if(l==0)printf("%d\n",1);

else

printf("%d\n",a[a[0]]);

return

0;}

這裡可以看到,處理時遇到(時直接入棧,+號時要將所有的之前入棧的*出棧,遇到)再將(出棧,然後按照這種方法運算就行

NOIP2013 表示式求值

題目 分析 棧的應用。兩個棧,乙個存數字乙個存操作符,當遇到符號時計算優先順序比它小的所有符號,則最後棧頂元素即為答案。include include include include using namespace std const int tmax 105,mod 10000 stack snu...

表示式的值(NOIP2011 普及組第四題)

對於 1 位二進位制變數定義兩種運算 運算的優先順序是 1.先計算括號內的,再計算括號外的。2.運算優先於 運算,即計算表示式時,先計算 運算,再計算 運算。例如 計算表示式a b c 時,先計算b c,其結果再與a 做 運算。現給定乙個未完成的表示式,例如 請你在橫線處填入數字0 或者1,請問 有...

NOIP2011普及組T4 表示式的值 模擬 棧

做法 一般求表示式值的問題都用棧來解決,而這一題棧中的每乙個元素要存兩個數,可以用pair來儲存,first表示一段中結果為0的情況數,second表示一段中結果為1的情況數。設定乙個函式f l,r 表示 l,r 這一段所得的結果情況數 返回值形式為上述的pair 不難想到處理方法 如果l r,返回...