牛客 吳楚月的表示式

2022-06-17 23:45:17 字數 1070 閱讀 9046

思路:直接從根開始dfs  dfs額外維護兩個引數,乙個是上次的最後乙個數,乙個是除了上次的數的和

這樣是為了再做乘法和除法的時候 能用上一次的最後乙個數來做, 記得+2次mod  因為lst和now加起來的可能小於-(1e9+7)

1 #include2

using

namespace

std;

3const

int maxn=1e5+10;4

const

int mod=1e9+7;5

#define ll long long

6#define ull unsigned long long

7#define pi pair8

#define fi first

9#define sc second

10#define pb push_back

11 vectore[maxn];

12ll val[maxn];

13char

s[maxn];

14ll ans[maxn];

1516

ll power(ll b,ll n)

1725

return

r;26}27

2829

void dfs(int

u,ll lst,ll now)

3038

else

if(s[v]=='/'

)3943else

if(s[v]=='+'

)4448else

4953

}54 ans[u]=(lst+now+mod+mod)%mod;55}

5657

58int

main()

5971

for(int i=2;i<=n;i++) cin>>s[i];

72 dfs(1,0,val[1

]);73

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

7478

7980

8182

83 }

view code

NC218421 吳楚月的表示式(dfs)

樸素的做法是把全部的存起來,之後用正常的表示式計算做 據說這種方法容易mle 新的方法是,我們把這個式子當作兩個式子相加,因為他沒有括號,所以每次的優先順序都是相同的 因此我們根據四種情況分類討論即可 includeusing namespace std typedef long long ll t...

牛客 最小表示式

題目連線 題解 比賽的時候把題看錯了,以為只改變 的位置,補題時候,參考 發現數字的順序也可以改變,有點難受,如果是這樣的話,那其實挺好想的,按加號分一下塊,把數字排乙個序,從小到大一遍一遍的往塊裡加,直到加完,然後用大數加法,把他們相加就好了 不知道為甚一直發生段錯誤的 include h usi...

表示式求值(牛客)

題目描述 給定乙個字串描述的算術表示式,計算出結果值。輸入字串長度不超過100,合法的字元包括 0 9 字串內容的合法性及表示式語法的合法性由做題者檢查。本題目只涉及整型計算。輸入描述 輸入算術表示式 中綴表示式 400 5輸出描述 計算出結果值 405做題思路 將輸入的中綴表示式,轉換為對應的字尾...