NC218421 吳楚月的表示式(dfs)

2022-05-27 10:15:07 字數 977 閱讀 1543

樸素的做法是把全部的存起來,之後用正常的表示式計算做

據說這種方法容易mle

新的方法是,我們把這個式子當作兩個式子相加,因為他沒有括號,所以每次的優先順序都是相同的

因此我們根據四種情況分類討論即可

#includeusing

namespace

std;

typedef

long

long

ll;typedef pair

pll;

const

int n=1e5+10

;const

int inf=0x3f3f3f3f

;const

int mod=1e9+7

;ll w[n];

intf[n];

ll ans[n];

struct

node;

vector

g[n];

ll qmi(ll a,ll b)

a=a*a%mod;

b>>=1

; }

return

res;

}void dfs(int u,int

fa,ll a,ll b)

if(g[u][i].op=='-'

)

if(g[u][i].op=='*'

)

if(g[u][i].op=='/'

) }

ans[u]=(a+b)%mod;

}int

main()

for(i=2;i<=n;i++));

g[f[i]].push_back();

}dfs(

1,0,0,w[1

]);

for(i=1;i<=n;i++)

cout

<

return0;

}

view code

牛客 吳楚月的表示式

思路 直接從根開始dfs dfs額外維護兩個引數,乙個是上次的最後乙個數,乙個是除了上次的數的和 這樣是為了再做乘法和除法的時候 能用上一次的最後乙個數來做,記得 2次mod 因為lst和now加起來的可能小於 1e9 7 1 include2 using namespace std 3const ...

NC 16657 暴力 中綴表示式

題意 傳送門 nc 16657 題解驗證表示式的等價性,考慮代入多組素數進行判斷,防止溢位還要模乙個大素數。對於表示式的求解,先用棧預處理多餘的括號 然後按照操作符的優先順序遞迴求解,操作符優先順序越低的越先處理,這樣保證回溯時滿足操作符越高的越優先計算 對於二元運算子,只記錄出現在括號外的部分,對...

字首表示式 中綴表示式 字尾表示式的區別

一 三者的概念 參考維基百科 1.1中綴表示式 中綴表示式是符合人類直覺的一種表達方式,其特點是操作符 二元操作符 在中間,運算元在兩側。例如 3 4 5 6 7,5 6 7等。括號的存在會影響計算步驟的執行。1.2字首表示式 又稱波蘭表示式 字首表示式 以及字尾表示式 是符合計算機思維的一種表達方...