如何把字尾表示式轉回普通表示式?
怎麼維護詢問?
運算子整個子樹需滿足的條件(遞迴到當前的x)
左/右兒子的最初的值(已知)
右/左兒子的條件(遞迴下去)
a nd
andan
d111
0-201
00-1-1
任意-1
-2任意-2oror
or11-10
101-2
01-1任意
-1任意-2not
notno
t1/0
0/1-1
/-1-2/
-2
#include
#include
#include
using
namespace std;
#define n 1000010
char st[n]
;int tot =
0, a[n]
, ans[n]
, q[n]
;struct
f[n]
;// -1 not
// -2 and
// -3 or
void
dfs(
int v)
int l, r;
if(f[v]
.l)dfs
(f[v]
.l), l = f[f[v]
.l].s;
if(f[v]
.r)dfs
(f[v]
.r), r = f[f[v]
.r].s;
if(f[v]
.x ==-1
) f[v]
.s =
1- r;
else
if(f[v]
.x ==-2
) f[v]
.s = l & r;
else f[v]
.s = l | r;
}void
solve
(int v,
int x)
if(f[v]
.x ==-1
)else
if(f[v]
.x ==-2
)else
if(f[v]
.x ==-3
)}intmain()
else
if(st[i]
=='!'
)else
if(st[i]
=='&'
)else
if(st[i]
=='|')}
scanf
("%d"
,&n)
;for
(i =
1; i <= n; i++
)scanf
("%d"
,&a[i]);
dfs(q[1]
);solve
(q[1],
1);scanf
("%d"
,&q)
;while
(q--
)return0;
}
棧 二叉樹 表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入 輸入...
棧 算術表示式
將乙個算術表示式 即中綴形式 轉化成其字尾形式,並算出答案。include include include include include include using namespace std using namespace std bool isoperator char ch return f...
表示式求值(棧)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入...