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

 #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 = ;
for (int i = s + ; i<length; i++)
{
if (line[i] == '[') p++;
if (line[i] == ']') p--;
if (p == && line[i] == ',')
{
dfs(depth + , s + , i-);
dfs(depth + , i + , length - );
}
}
}
else {
long long w = ;
for (int i = s; i <= length; i++)
w = w * + line[i] - '';
++number;
++ans[w << depth];
}
} int main()
{
int t;
int maxn;
cin >> t;
while (t--)
{
cin >> line;
ans.clear();
number = ;
dfs(, , line.size()-);
maxn = ;
map<long long, int>::iterator it = ans.begin();
for (; it != ans.end(); it++)
{
maxn = max(maxn, it->second);
}
cout << number - maxn << endl;
}
return ;
}

UVa 12166 修改天平的更多相关文章

  1. UVA - 12166 Equilibrium Mobile (修改天平)(dfs字符串表示的二叉树)

    题意:问使天平平衡需要改动的最少的叶子结点重量的个数. 分析:天平达到平衡总会有个重量,这个重量可以由某个叶子结点的重量和深度直接决定. 如下例子: 假设根结点深度为0,结点6深度为1,若以该结点为基 ...

  2. UVA 12166 Equilibrium Mobile

    题意: 给出数个天平,每个天平的结构都类似于二叉树,只有左右重量都相等时才平衡,求每个天平最少改多少个秤砣,也就是叶子结点可以使得整个天平平衡.天平的深度不超过16. 分析: 要使得改动的数量最少,那 ...

  3. UVA 12166 Equilibrium Mobile(贪心,反演)

    直接贪心.先想想最后平衡的时候,如果知道了总重量,那么每一个结点的重量其实也就确定了. 每个结点在左在右其实都不影响,只和层数有关.现在反过来,如果不修改某个结点,那么就可以计算出总质量,取总质量出现 ...

  4. 【习题 6-6 UVA - 12166 】Equilibrium Mobile

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举一个秤砣的重量不变. 某一个秤砣的重量不变之后. 所有秤砣的重量就固定了. 因为它的兄弟节点的重量要和它一样. 则父亲节点的重量 ...

  5. 【Luogu P1168】【Luogu P1801&UVA 501】中位数&黑匣子(Black Box)——对顶堆相关

    Luogu P1168 Luogu P1801 UVA 501(洛谷Remote Judge) 前置知识:堆.优先队列STL的使用 对顶堆 是一种在线维护第\(k\)小的算法. 其实就是开两个堆,一个 ...

  6. 这个随笔用用来放一些好的思想和思考方式(暂时secret)

    一: 给你一个只有4和7的数字,求这是第几个幸运数字? 思路: 我们把4映射成0,7映射成1,然后就如下枚举:0,1,00,01,10,11.因为是映射的,所以可以前导0,然后我们就会知道给出的那个数 ...

  7. UVa 1354 Mobile Computing | GOJ 1320 不加修饰的天平问题 (例题 7-7)

    传送门1(UVa): https://uva.onlinejudge.org/external/13/1354.pdf 传送门2(GOJ): http://acm.gdufe.edu.cn/Probl ...

  8. UVa 1354 天平难题

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. UVA 11992 Fast Matrix Operations(线段树:区间修改)

    题目链接 2015-10-30 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=s ...

随机推荐

  1. Spark高级数据分析中文版-读者交流

    第二章: 备注:1.本书第二章样例数据由于才有的是短链接,国内的用户可能无法下载.我把数据集拷贝到百度网盘上.大家可以从这个地方下载:http://pan.baidu.com/s/1pJvjHA7 谢 ...

  2. 前端开发week1

    1.前端开发前期相关工具 photoshop:主要学习运用与前端相关工具,了解UI与前端的关联.    axure:原型设计,通过设计原型了解网页基本结构,结合ps对UI有更好的理解.    webs ...

  3. int->string-------------c

    void intToString(int n,char a[]){ int i=1,m=n; while((n/=10)!=0)  i++; int j=0; for(;j<i;j++){  a ...

  4. 浅谈c语言的指针

    对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...

  5. Iframe 知识点总结

    JS刷新框架外页面七种实现代码: 1. window.parent.frames[1].location.reload(); 2. window.parent.frames.bottom.locati ...

  6. Java重载遇到泛型

    今天被问到一个有意思的问题,大家都知道重载的概念吧:一个类中定义同名的方法,参数表不同(参数类型,或者参数个数不通): 但是,如果是下面这个两个方法呢 public static int fn(Lis ...

  7. jdk 编译器 对final字段的处理

    class FinalTest{     void a(){         final int i=10;         int j=10;     } }            stack=2, ...

  8. 本地mysql数据库root密码丢失修改方法

      1,停止数据库 2,cd /etc/mysql 3,利用vim命令打开mysql配置文件my.cnf,在mysqld进程配置文件中添加skip-grant-tables,添加完成后,执行wd保存. ...

  9. sshd 指定端口,指定秘钥文件

     scp -i ~/test -P22219 SRC/ root@10.2.227.76:/data/ #sshd的端口指定的是22219,  -i 指定秘钥文件   指定秘钥文件需要注意的是,需要提 ...

  10. pip和requests模块的安装

    1.配置python的环境变量 在path中加入pyhton的环境变量,如我的是E:\Python27 2. 如果没有pip,一个帮助软件管理的东东(现在的版本一般有,若有跳到3) 去https:// ...