樸素的做法是把全部的存起來,之後用正常的表示式計算做
據說這種方法容易mle
新的方法是,我們把這個式子當作兩個式子相加,因為他沒有括號,所以每次的優先順序都是相同的
因此我們根據四種情況分類討論即可
#includeusingview codenamespace
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;
}
牛客 吳楚月的表示式
思路 直接從根開始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字首表示式 又稱波蘭表示式 字首表示式 以及字尾表示式 是符合計算機思維的一種表達方...