题意:

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

分析:

  要使得改动的数量最少,那么就至少有一个秤砣不变,然后以这个秤砣为基准来调整整个天平。天平的结构是二叉树,那么由此我们可以得出,如果以深度为d重量为w的秤砣为基准,那么整个天平的重量就是w * pow(2, d),即w << d。当然,可能会有一些秤砣算出的以各自为基准的天平总重量相同,设天平总重量为sum,那么这些秤砣的数量就表示了如果使天平的总重量为sum,需要使多少个秤砣保持不变。用map<long long,int>a,表示以a[i]为基准需要改动多少个。

代码:

  

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;map<long long,int>a;int sum;string line;void dfs(int d,int s,int l){    if(line[s]=='[')    {        int p=0;        for(int i=s+1;i!=l;++i)        {            if(line[i]=='[')                ++p;            if(line[i]==']')                --p;            if(p==0&&line[i]==',')            {                dfs(d+1,s+1,i-1);                dfs(d+1,i+1,l-1);            }        }    }    else    {        long long w=0;        for(int i=s;i<=l;++i)            w=w*10+line[i]-'0';        ++sum,++a[w<<d];    }}int main(){    int T;    cin>>T;    while(T--)    {        cin>>line;        a.clear();        sum=0;        dfs(0,0,line.size()-1);        int maxn=0;        map<long long,int>::iterator it;        for(it=a.begin();it!=a.end();it++)            maxn=max(maxn,it->second);        cout<<sum-maxn<<endl;    }}

转载于:https://www.cnblogs.com/137033036-wjl/p/4890031.html

UVA 12166 Equilibrium Mobile相关推荐

  1. UVA - 12166 Equilibrium Mobile

    /* 题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pro ...

  2. [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile

    题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...

  3. UVA - 12569 Planning mobile robot on Tree (EASY Version) BFS

    题意:有一颗n个节点的树,其中一个节点有机器人,指定m个节点有障碍物,指定终点,问最少需要移动多少步才能到达,移动过程中遇到障碍物需要将其移动到空地. 分析:bfs搜索,是每次都对障碍物进行移动,将障 ...

  4. UVa12166 Equilibrium Mobile修改天平(二叉树+dfs)

    题目大意:给定一个深度不超过16的二叉树,代表一个天平,问至少修改多少个秤砣,才能使天平平衡. 题目意思很简单,就是找一个可以使整个天平修改次数最少的点,一个点可以确定整个天平,开始我就用的这个思路, ...

  5. UVA12166 Equilibrium Mobile

    VJ传送门 一道思维题,刚开始看的时候没什么思路,在博客园上参考了大佬的解析,在这里总结一下. 一.分析 这道题要求让天平平衡所需要的最小改动次数,至少有一个不变,我们可以先选定一个不变的基准,然后改 ...

  6. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

  7. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  8. 算法竞赛入门经典(第二版)-刘汝佳-第六章 数据结构基础 习题(12/14)

    文章目录 说明 习题 习6-1 UVA 673 平衡的括号 习6-2 UVA 712 S - 树 习6-3 UVA 536 二叉树重建 习6-4 UVA 439 骑士的移动 习6-5 UVA 1600 ...

  9. 【三种解法】Not so Mobile UVA - 839_19行代码AC

    立志用最少的代码做最高效的表达 Before being an ubiquous communications gadget, a mobile was just a structure made o ...

最新文章

  1. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis
  2. np.eye()的函数能将一个label数组,大小为(1,m)或者(m,1)的数组,转化成one-hot数组
  3. 用Ext 2.0 combobox 做的省份和城市联动选择框
  4. python歌词统计单词词频_Python爬虫网易云歌词及词频统计
  5. python的盈利模式_八大盈利模式是什么?一篇文教会你盈利模式分析!
  6. UnitTest in .NET(Part 1)
  7. Linux块设备IO子系统
  8. java 实现中文排序,Java自定义比较器实现中文排序
  9. javascrip中setTimeout和setInterval
  10. 技术人的折腾(二)-缺少的东西,你迟早要补起来
  11. 《高效能人士的7个习惯》读后摘记
  12. 盘点苹果乔布斯憎恨Google的十大原因
  13. svm图片多分类python代码_[OpenCV随笔]-OpenCV3.x中SVM多分类使用(代码篇)
  14. python自回归模型_向量自回归模型(VAR)到底厉害在哪里?
  15. DPCM之预测误差均方值推导最小二乘法总结
  16. walking机器人仿真教程-应用-多点导航结合闹铃播放实现移动闹钟
  17. C#Code128条形码生成
  18. debian8.7 下配置fai机环境
  19. wps可以登录网页版_wps网页版入口_WPS个人免费版_点点游
  20. invalid byte 1 of 1-byte UTF-8 sequence

热门文章

  1. JDK5--Annotation学习:基础(二)
  2. 关于 Qt 5,你所需要了解的基础知识
  3. 为啥有的程序员不爱说话,却表达能力爆表?(附教程)
  4. c语言case可以判断多个条件吗,case 多个条件
  5. Java的技术采⽤用⽣生命周期
  6. 被丢弃的消息不能再次出现
  7. zookeeper的设计猜想-Observer角色
  8. 接口中也可以有方法了
  9. 搭建elasticsearch测试工程
  10. 前端框架:发送请求获取数据的执行逻辑