码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 12166 修改天平

时间:2016-12-27 23:09:36      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:clear   number   max   line   amp   bsp   names   online   org   

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了...

 1 #include<iostream>
 2 #include<map>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 int number;
 9 string line;
10 map<long long, int> ans;
11 
12 void dfs(int depth, int s, int length)
13 {
14     if (line[s] == [)
15     {
16         int p = 0;
17         for (int i = s + 1; i<length; i++)
18         {
19             if (line[i] == [)  p++;
20             if (line[i] == ])  p--;
21             if (p == 0 && line[i] == ,)
22             {
23                 dfs(depth + 1, s + 1, i-1);
24                 dfs(depth + 1, i + 1, length - 1);
25             }
26         }
27     }
28     else {
29         long long w = 0;
30         for (int i = s; i <= length; i++)
31             w = w * 10 + line[i] - 0;
32         ++number;
33         ++ans[w << depth];
34     }
35 }
36 
37 int main()
38 {
39     int t;
40     int maxn;
41     cin >> t;
42     while (t--)
43     {
44         cin >> line;
45         ans.clear();
46         number = 0;
47         dfs(0, 0, line.size()-1);
48         maxn = 0;
49         map<long long, int>::iterator it = ans.begin();
50         for (; it != ans.end(); it++)
51         {
52             maxn = max(maxn, it->second);
53         }
54         cout << number - maxn << endl;
55     }
56     return 0;
57 }

 

UVa 12166 修改天平

标签:clear   number   max   line   amp   bsp   names   online   org   

原文地址:http://www.cnblogs.com/zyb993963526/p/6227627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!