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

要点:
我觉得,这题主要是考察思维,而不是考察技巧
当然,还是有一点点技巧的,就是不用这个就会有些麻烦,比如map 的巧妙应用,就算是一个技巧

其实这题的思路也比较巧,就是对每个叶子结点,按照其深度,来推出如果以该叶子结点为基准,整棵树的质量

然后便能统计出每种总重量,各由多少个叶子结点推出,我们选最多的那个总重量,来保证需要修改的叶子最少

本题的巧妙之处就在于,只要以深度为depth(depth从0开始)重量为w的砝码为基准,那么就能求出整个天平的总重量,即w*2^(depth),在代码中可以简洁地表示为w<<depth。这样,我们只用统计每个可能的总重量对应了多少不需要改动的砝码,设一共有sum个砝码,总重量为sumw的天平对应的砝码个数是base[sumw],那么最终答案就是sum-max{base[i]}(i为所有可能的天平总重量)

查阅题解:
http://m.blog.csdn.net/hao_zong_yin/article/details/73028817
http://blog.csdn.net/u013555159/article/details/51356003
http://blog.csdn.net/crazysillynerd/article/details/43876123
http://www.bubuko.com/infodetail-714729.html

*/

#include <iostream>
#include <string>
#include <map>
#include <cctype>
#define rep(i, n) for (int i = 0; i < (n); i++)
typedef long long ll;
using namespace std;int main()
{string s;map<ll, int> m;map<ll, int>::iterator it;int t;cin >> t;while (t--){cin >> s;m.clear();int depth = 0, leaves = 0, sw_max = 0; // 分别为 当前深度、当前已找到的叶子数,以及 same wight _max,表示叶子重量出现的最多次数,我们取这个最多次数,把与之不同的进行修改,最后得到的就是最小修改次数rep(i, (int)s.size()){if (s[i] == '[') depth++;else if (s[i] == ']') depth--;else if (isdigit(s[i])){leaves++;ll weight = 0;while (isdigit(s[i])){weight = weight * 10 + s[i++] - '0';}weight <<= depth;m[weight]++;i--;}}for (it = m.begin(); it != m.end(); it++)sw_max = max(sw_max, it->second);cout << leaves - sw_max << endl;}return 0;
}

/*
  而贴出的其他题解链接,基本上都是用bfs的思路,也即:
  
  在每次出现逗号,且深度相对参数为0时(注意,这个地方有点奇妙,深度不是真正为0,而只是相对参数为0),将树分为左子树和右子树
  
  然后再对左右子树按照这样的思路来递归,直到这个参数表示的范围内,找不到任何 "[",或是"]",或是"," 
  此时就说明,我们已经把该参数范围里的所有特殊符号剔除,剩下的范围可以表示一个叶子,我们就可以求叶子的重量,再结合其深度,推出根节点位置的重量
  
  其他的思路,与上一种思路基本一致
*/

转载于:https://www.cnblogs.com/mofushaohua/p/7789350.html

UVA - 12166 Equilibrium Mobile相关推荐

  1. UVA 12166 Equilibrium Mobile

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

  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. Android KTV
  2. [20160307]绑定变量的分配长度3.txt
  3. Python-线程的生命周期
  4. 来自Riot 的一份游戏美术教程(一):核心原则
  5. POJ 2385 Apple Catching
  6. RH Linux 企业5+apache+mysql+php+phpmyadmin的简单配置.
  7. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...
  8. php5.3 appache phpstudy win7win8win10下 运行速度慢
  9. 漏洞补丁:windwos补丁下载(MS17-010)
  10. 微信小程序 云开发 欢迎登录注册
  11. w锋ndows用户组设置,第2章Wndows+Server+2008本地用户和组.ppt
  12. html页面怎样打印二分之一,打印二分之一a4纸 大小的纸张 Word该如何设置?
  13. 强强联合 数睿数据与霍尼韦尔Tridium达成战略合作
  14. 基础算法(三) --- 轮询
  15. php考试报名,报名系统
  16. .dcm格式文件软件读取及python处理
  17. h1283 linux内核,复苏老客 » 发布一个开博尔H1283双核固件
  18. 移动端--app,小程序,h5
  19. 安卓饼状图设置软件_饼图生成器app下载|饼图生成器安卓版下载_v1.1.0_9ht安卓下载...
  20. 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(1.数据处理)

热门文章

  1. 【译】IPFS — The Permanent, Distributed Web Continues…..
  2. 【译】Jumping into Solidity — The ERC721 Standard (Part 3)
  3. 用 Go 构建一个区块链 ---- Part 1: 基本原型
  4. (原创)Android6.0亮屏流程分析
  5. android界面之美---自定义网络请求进度加载对话框
  6. java 线程可见性,Java多线程之内存可见性
  7. JZOJ 3739. 【TJOI2014】匹配
  8. MySQL编程技巧_PHP与MySQL开发的8个技巧小结
  9. diskgenius linux版_纯净版Windows10系统安装详细教程
  10. postgresql中装gis插件_Postgresql 空间扩展需要Postgis插件