天平&二叉树--uva12166 Equilibrium Mobile
2017-07-26 20:11
423 查看
用字符串形式给定一个天平,求出最少修改几个秤砣的质量,能使天平平衡。
别人非常非常非常神奇的题解!
1.秤砣都位于二叉树的叶子结点,即修改叶子结点使得天平平衡
2.至少有一个叶子结点不修改。
那么对于某个叶子结点,如果它不修改,其他所有结点参考它来平衡,它质量为w,深度为d,那么平衡后整个天平质量为w << d
3.对每个叶子结点为参考点的情况计算天平质量sumw,那可能有一些叶子结点计算出的sumw相同,那么就是当天平平衡后的质量要是为sumw,那么这些点都不用改。
用map计数求max,sum - max即所求。
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace
std;
string s;
map<long
long,int>mp;
int solve()
{
int dep =
0,cnt = 0;
for (int i =
0; i < s.size(); i ++) {
if (s[i] ==
'[') dep ++;
if (s[i] ==
']') dep --;
if (isdigit(s[i]))
{
int num =
s[i] -
'0',base = 10;
while (isdigit(s[i
+ 1])) {
i ++;
num = num * base + s[i] -
'0';
}
mp[(long
long)num <<
dep] ++;
cnt ++;
}
}
return cnt;
}
int main()
{
int T;
cin >> T;
while (T --) {
cin >>
s;mp.clear();
int sum =
solve();
int m =
0;
for(auto a:mp) m =
max(m,a.second);
cout << sum - m <<
endl;
}
return
0;
}
递归不大会,就偷懒直接用[]计算叶子深度了,想抱住自己亲一口~
别人非常非常非常神奇的题解!
1.秤砣都位于二叉树的叶子结点,即修改叶子结点使得天平平衡
2.至少有一个叶子结点不修改。
那么对于某个叶子结点,如果它不修改,其他所有结点参考它来平衡,它质量为w,深度为d,那么平衡后整个天平质量为w << d
3.对每个叶子结点为参考点的情况计算天平质量sumw,那可能有一些叶子结点计算出的sumw相同,那么就是当天平平衡后的质量要是为sumw,那么这些点都不用改。
用map计数求max,sum - max即所求。
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace
std;
string s;
map<long
long,int>mp;
int solve()
{
int dep =
0,cnt = 0;
for (int i =
0; i < s.size(); i ++) {
if (s[i] ==
'[') dep ++;
if (s[i] ==
']') dep --;
if (isdigit(s[i]))
{
int num =
s[i] -
'0',base = 10;
while (isdigit(s[i
+ 1])) {
i ++;
num = num * base + s[i] -
'0';
}
mp[(long
long)num <<
dep] ++;
cnt ++;
}
}
return cnt;
}
int main()
{
int T;
cin >> T;
while (T --) {
cin >>
s;mp.clear();
int sum =
solve();
int m =
0;
for(auto a:mp) m =
max(m,a.second);
cout << sum - m <<
endl;
}
return
0;
}
递归不大会,就偷懒直接用[]计算叶子深度了,想抱住自己亲一口~
相关文章推荐
- uva12166 - Equilibrium Mobile
- UVa-12166 Equilibrium Mobile
- UVA - 12166 Equilibrium Mobile
- Uva - 12166 - Equilibrium Mobile
- Uva - 12166 - Equilibrium Mobile
- UVA-863 Not so Mobile (简单二叉树)
- UVa 12166(字符型二叉树的dfs)
- 习题6-6 修改天平 UVa 12166 二叉树 *
- 例题6-9UVA839 - Not so Mobile 递归访问二叉树
- UVA 839 Not so Mobile(二叉树|DFS)
- uva839 Not so Mobile (重建二叉树)
- UVa 12166 - Equilibrium Mobile <二叉树+DFS>
- uva839-Not so Mobile-二叉树的DFS
- UVa 839 Not so Mobile (DFS二叉树)
- 12166 - Equilibrium Mobile
- UVA 839 Not so Mobile (递归建立二叉树)
- UVA839 Not so Mobile【二叉树】【递归】
- UVa 12166 - Equilibrium Mobile(二叉树+递归处理括号匹配+模板)
- UVA-12166 Equilibrium Mobile(二叉树)
- UVa - 839 - Not so Mobile(二叉树的DFS)