2020 CSP J T3 表示式(棧 二叉樹)

2021-10-10 10:32:49 字數 1629 閱讀 2658

如何把字尾表示式轉回普通表示式?

怎麼維護詢問?

運算子整個子樹需滿足的條件(遞迴到當前的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 結果保留兩位小數 輸入...