首先因為有優先順序和括號,可以先把表示式化成字尾表示式的形式,其中用'.'表示這乙個點是數字。
用u記錄得到0的方案數,v記錄得到1的方案數。
設兩個步驟的運算結果經過每個符號到乙個結果時,
第乙個運算結果算出0的方案數為t1,1的方案數為t2。第二個算出0的方案數為t3,算出1的方案數為t4。
則有: 當符號是「⊕」時,得到0的方案數為t1*t3,1的方案數:t1*t4+t2*t3+t2*t4
當符號是「×」時,得到0的方案數為t1*t3+t1*t4+t2*t3,1的方案數:t2*t4
ac**:
1 #include2 #include3ac**using
namespace
std;
4const
int n=100005;5
const
int mod=10007;6
intl,top,k;
7char
c[n],ans[n],st[n];
8int
u[n],v[n];
9int
main()
19if(c[i]==')'
)23if(c[i]!='
('&&c[i]!='
)') ans[++k]='.'
;24}25
while(top) ans[++k]=st[top--];
26for(int i=1;i<=k;i++)
31if(ans[i]=='*'
) 36
if(ans[i]=='+'
)41}42 printf("
%d",u[1
]);43
return0;
44 }
洛谷 P1310 表示式的值 解題報告
對於1 位二進位制變數定義兩種運算 運算的優先順序是 先計算括號內的,再計算括號外的。運算優先於 運算,即計算表示式時,先計算 運算,再計算 運算。例如 計算表示式a b c時,先計算 b c,其結果再與 a 做 運算。現給定乙個未完成的表示式,例如 請你在橫線處填入數 0或者1 請問有多少種填法可...
P1310 表示式的值
原題鏈結 water lift 一波講解,然後我們就會了這個題,然後我們就要寫部落格啦qwq 這是個布林表示式基計數問題。這個其實 就是 或運算,就是 與運算。我們將這個式子通俗得看成 x y 和 x y 我們設x0是使x為0的方案數,x1是使x為1的方案數 y0是使y為0的方案數,y1是使y為1的...
資料結構 P1310 表示式的值
題目鏈結 對於1 位二進位制變數定義兩種運算 運算的優先順序是 先計算括號內的,再計算括號外的。運算優先於 運算,即計算表示式時,先計算 運算,再計算 運算。例如 計算表示式a b c時,先計算 b c,其結果再與 a 做 運算。現給定乙個未完成的表示式,例如 請你在橫線處填入數字00或者11 請問...