您的位置:首页 > 产品设计 > UI/UE

UVa 12166 Equilibrium Mobile——思路题

2017-06-11 15:11 351 查看
由平衡可知父节点的质量等于子节点的两倍,某层的质量等于他下面一层质量的两倍,最终第0层的质量就是整棵树的质量(这里的质量其实类似于一种权值的累加,不是实际质量,不要误以为是所有叶子质量之和。。。。。。)

以1片叶子为基点,则1片叶子就可以决定1棵树的质量;

以n片叶子为基点,则n片叶子就可以决定n棵树的质量;

如果n棵树中有两棵树的质量相同,则作为他们基点的两片叶子是不用修改的; 如果n棵树中有三棵树质量相同,则作为他们基点的三片叶子是不用修改的。。。。。。

如果n棵树中有m棵树质量相同,则作为他们基点的m片叶子是不用修改的。

最终需要修改的叶子就为n-m片

#include <bits/stdc++.h>

using namespace std;

int main()
{
string s;
map<long long, int> m;
map<long long, int>::iterator it;
int T; cin >> T;
while (T--) {
cin >> s;
m.clear();
int deep = 0, a = 0, b = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '[') deep++;
else if (s[i] == ']') deep--;
else if (isdigit(s[i])) {
a++;
long long sum = 0;
while (isdigit(s[i])) {
sum = sum * 10 + s[i++] - '0';
}
sum = sum * (1<<deep);
m[sum]++;
i--;
}
}
for (it = m.begin(); it != m.end(); it++) b = max(b, it->second);
cout << a - b << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: