UVa 12166 修改天平
2016-12-27 22:00
453 查看
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3318
题意:给一个深度不超过16的二叉树,代表一个天平。每根杆悬挂在中间,每个秤砣的重量已知,至少修改多少个秤砣的重量才能让天平平衡?
要让天平平衡,必须以其中一个秤砣作为标准,然后修改其余的秤砣。当以深度为d,值为x的叶子节点作为标准时,可以发现此时天平的总质量为x<<d。
因此可以遍历二叉树的每个叶子节点,在这里可以使用map容器,计算出秤砣总质量m所出现的次数,并且记录叶子节点数量number。这样,最后(number-map容器中最大的数)即为修改的最少次数。
一开始我不明白为什么要w*10,直接w<<depth不就行了,后来意识到如果是多位数就需要*10了...
题意:给一个深度不超过16的二叉树,代表一个天平。每根杆悬挂在中间,每个秤砣的重量已知,至少修改多少个秤砣的重量才能让天平平衡?
要让天平平衡,必须以其中一个秤砣作为标准,然后修改其余的秤砣。当以深度为d,值为x的叶子节点作为标准时,可以发现此时天平的总质量为x<<d。
因此可以遍历二叉树的每个叶子节点,在这里可以使用map容器,计算出秤砣总质量m所出现的次数,并且记录叶子节点数量number。这样,最后(number-map容器中最大的数)即为修改的最少次数。
一开始我不明白为什么要w*10,直接w<<depth不就行了,后来意识到如果是多位数就需要*10了...
#include<iostream> #include<map> #include<cstring> #include<string> #include<algorithm> using namespace std; int number; string line; map<long long, int> ans; void dfs(int depth, int s, int length) { if (line[s] == '[') { int p = 0; for (int i = s + 1; i<length; i++) { if (line[i] == '[') p++; if (line[i] == ']') p--; if (p == 0 && line[i] == ',') { dfs(depth + 1, s + 1, i-1); dfs(depth + 1, i + 1, length - 1); } } } else { long long w = 0; for (int i = s; i <= length; i++) w = w * 10 + line[i] - '0'; ++number; ++ans[w << depth]; } } int main() { int t; int maxn; cin >> t; while (t--) { cin >> line; ans.clear(); number = 0; dfs(0, 0, line.size()-1); maxn = 0; map<long long, int>::iterator it = ans.begin(); for (; it != ans.end(); it++) { maxn = max(maxn, it->second); } cout << number - maxn << endl; } return 0; }
相关文章推荐
- UVa12166 Equilibrium Mobile(修改天平)
- [UVa 12166] 修改天平(Equilibrium Mobile)
- uva12166 修改天平 元素的贡献值-最优解
- UVA12166 修改天平
- 习题6-6 修改天平(Equilibrium Mobile, NWERC 2008, UVa12166)
- 习题6-6 修改天平 UVa 12166 二叉树 *
- UVA 12166 Equilibrium Mobile 修改天平
- UVA 12166 Equilibrium Mobile (天平性质 + DFS)
- UVA-12166 天平性质+字符处理
- 天平难题(Mobile ComputingUVa 1354)
- 天平&二叉树--uva12166 Equilibrium Mobile
- UVA 12345 Dynamic len(set(a[L:R])) 分块或带修改莫队
- 紫书章六例题九 天平 UVA 839(更新二叉树的节点上的值)
- UVA 11987 Almost Union-Find (单点修改的并查集)
- 例题7-7 天平难题(Mobile Computing, ACM/ICPC Tokyo 2005, UVa1354)
- UVA12345 (带修改的莫队)
- 天平难题 UVa 1354
- UVA - 12166 Equilibrium Mobile
- uvalive 4730(并查集+区间修改单点查询)
- UVa 12086 Potentiometers (树状数组&点修改)