国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

UVa 12166 - Equilibrium Mobile(二叉樹+遞歸處理括號(hào)匹配+模板)

2019-11-10 17:33:30
字體:
供稿:網(wǎng)友

題目鏈接

題目

Mark下大神的博客:http://morris821028.github.io/ 簡直太強(qiáng)了。 題解鏈接:http://morris821028.github.io/2014/10/03/oj/uva/uva-12166/#PRoblem


題目大意:

給一個(gè)天平表達(dá)式,請問至少要調(diào)整幾個(gè)權(quán)重才能使之平衡。(直接復(fù)制來的)


解題過程:

自己大概廢了一個(gè)小時(shí)想一個(gè)特麻煩的解法,首先想的是自頂向下的平衡,然后dfs下去還是從必須從葉節(jié)點(diǎn)開始平衡。

于是想自底向上平衡,每次把可以平衡成的質(zhì)量和調(diào)整的次數(shù)傳給上一層,比如調(diào)整[1,2],給上一層傳遞三個(gè)狀態(tài):調(diào)整2到1,質(zhì)量變?yōu)?,調(diào)整1次;調(diào)整1變?yōu)?,質(zhì)量變?yōu)?,調(diào)整一次;兩個(gè)都一起調(diào)整到一個(gè)任意的數(shù),調(diào)整兩次。 顯然這樣需要給每個(gè)節(jié)點(diǎn)開辟一個(gè)空間儲(chǔ)存狀態(tài),妥妥爆內(nèi)存。

想了一個(gè)小時(shí)只是這個(gè)結(jié)果,于是去百度了下,看到: 那麼可以得知道假使一個(gè)權(quán)重不改,最後的天平重量為何。 假使 depth 上的權(quán)重 w 不改,則最後的天平重量就是 w * pow(2, depth)。

于是想到建樹,統(tǒng)計(jì)下葉子節(jié)點(diǎn)所在的層數(shù),然后拿每個(gè)葉子節(jié)點(diǎn)跑一邊,結(jié)果是O(n^2)。

后來看到這個(gè)博客確實(shí)是驚艷到了……


題目分析:

這里分析下下面的代碼好了。

這里map的使用和遍歷可以做模板了,要是我的話,就桶排然后遍歷一遍了…

這個(gè)遞歸寫的真是太強(qiáng)了!!

然后就是sscanf的用法,可以拿來做模板,要我的話,專門寫一個(gè)字符串轉(zhuǎn)整數(shù)的函數(shù)了,麻煩的要死。


AC代碼:

#include <cstdio>#include <cstring>#include <map>using namespace std;char exp[1123456];map<long long, int> R;void dfs(int l, int r, int dep){ if (exp[l] == '[') { int p = 0; for (int i = l + 1; i <= r - 1; i++) { if (exp[i] == '[') p++; if (exp[i] == ']') p--; if (p == 0 && exp[i] == ',') { dfs(l+1, i-1, dep+1); dfs(i+1, r-1, dep+1); } } } else { int w; exp[r+1] = '/0'; sscanf(exp+l, "%d", &w); R[(long long)w<<dep]++; }}int main(){ int testcase; scanf("%d", &testcase); while (testcase--) { scanf("%s", exp); R.clear(); dfs(0,strlen(exp) - 1, 0); int sum = 0, mx = 0; for (map<long long, int>::iterator it = R.begin(); it != R.end(); it++) sum += it->second, mx = max(mx, it->second); printf("%d/n", sum - mx); } return 0;}
上一篇:Linux學(xué)習(xí)筆記

下一篇:樹的重心

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石渠县| 正安县| 邻水| 津南区| 闵行区| 莱阳市| 临海市| 仁怀市| 宁乡县| 疏附县| 安新县| 专栏| 清水县| 都江堰市| 安多县| 蓝山县| 边坝县| 宝坻区| 淳安县| 曲阜市| 辰溪县| 长顺县| 木里| 河北区| 夏津县| 大姚县| 禹州市| 子长县| 北碚区| 比如县| 建始县| 靖安县| 绥棱县| 南昌县| 长治县| 梧州市| 甘谷县| 清远市| 呼和浩特市| 冷水江市| 利川市|