這道題一看就跟正常表示式求值差不多,我們需要一步一步儲存前一部分的得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,返回...