【习题 6-6 UVA - 12166 】Equilibrium Mobile
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
枚举一个秤砣的重量不变。
某一个秤砣的重量不变之后。
所有秤砣的重量就固定了。
因为它的兄弟节点的重量要和它一样。
则父亲节点的重量就是这个节点的两倍了。
以此类推可以得到所有节点的重量的值。
第i层应该的重量都是相同的。
用一个map[height][x]统计某层里面有多少个数字x即可。
这样只要循环层数次就好。
复杂度够过了。
【代码】
/*
1.Shoud it use long long ?
2.Have you ever test several sample(at least therr) yourself?
3.Can you promise that the solution is right? At least,the main ideal
4.use the puts("") or putchar() or printf and such things?
5.init the used array or any value?
6.use error MAX_VALUE?
7.use scanf instead of cin/cout?
*/
#include <bits/stdc++.h>
using namespace std;
string s;
int n,total;
map <long long,int> mmap[20];
map <int,vector <int> > mmap2;
void dfs(int l,int r,int dep){
if (s[l]=='['){
int now = 0,i = l+1;
do{
switch (s[i]){
case '[':{
now++;
break;
}
case ']':{
now--;
break;
}
}
i++;
}while (now!=0);
// now==0;
while (s[i]!=',') i++;
// s[i]==','
dfs(l+1,i-1,dep+1),dfs(i+1,r-1,dep+1);
}else{
int x = 0;
for (int i = l;i <= r;i++) x = x*10 + s[i]-'0';
mmap[dep][x]++;
mmap2[x].push_back(dep);
total++;
}
}
int main(){
#ifdef LOCAL_DEFINE
freopen("F:\\c++source\\rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
int T;
cin >> T;
while (T--){
for(int i = 0;i<=18;i++) mmap[i].clear();
mmap2.clear();
total = 0;
cin >> s;
n = s.size();
int ans = -1;
if (s[0]!='['){
ans = 0;
}else{
dfs(0,n-1,0);
for (auto temp:mmap2){
long long x = temp.first;
auto v = temp.second;
for (auto dep:v){
int tempans = 0;
int now = dep;
long long xx = x;
while (xx<=(long long) 1e10 && now >= 0){
tempans += mmap[now][xx];
now--;
xx*=2;
}
xx = x;
now = dep;
while (xx%2==0 && now <= 18){
xx/=2;
now++;
tempans += mmap[now][xx];
}
if (ans==-1){
ans = total - tempans;
}else{
ans = min(ans,total-tempans);
}
}
}
}
cout << ans << endl;
}
return 0;
}
【习题 6-6 UVA - 12166 】Equilibrium Mobile的更多相关文章
- UVA 12166 Equilibrium Mobile
题意: 给出数个天平,每个天平的结构都类似于二叉树,只有左右重量都相等时才平衡,求每个天平最少改多少个秤砣,也就是叶子结点可以使得整个天平平衡.天平的深度不超过16. 分析: 要使得改动的数量最少,那 ...
- UVA 12166 Equilibrium Mobile(贪心,反演)
直接贪心.先想想最后平衡的时候,如果知道了总重量,那么每一个结点的重量其实也就确定了. 每个结点在左在右其实都不影响,只和层数有关.现在反过来,如果不修改某个结点,那么就可以计算出总质量,取总质量出现 ...
- UVA - 12166 Equilibrium Mobile (修改天平)(dfs字符串表示的二叉树)
题意:问使天平平衡需要改动的最少的叶子结点重量的个数. 分析:天平达到平衡总会有个重量,这个重量可以由某个叶子结点的重量和深度直接决定. 如下例子: 假设根结点深度为0,结点6深度为1,若以该结点为基 ...
- [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile
题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...
- UVa 12166 修改天平
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Uva 12569 Planning mobile robot on Tree (EASY Version)
基本思路就是Bfs: 本题的一个关键就是如何判段状态重复. 1.如果将状态用一个int型数组表示,即假设为int state[17],state[0]代表机器人的位置,从1到M从小到大表示障碍物的位置 ...
- UVA-12166 Equilibrium Mobile(二叉树)
题目大意:改变二叉树上的权值,使树平衡,问最少该几个值. 题目分析:不会做,查的题解.有条奇妙的性质:如果将第d层权值为w的节点为基准做改动,则整棵树的总重量为w<<d,即w*2^d.仔细 ...
- 【例题 7-7 UVA - 1354】Mobile Computing
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 秤砣都是在叶子节点. 可以把它看成一个二叉树. 则我们每次只需要选择任意两个"节点",让他们组成一棵二叉树就可以 ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
随机推荐
- 做raid1 经验总结
背景: MHP 3楼一台ThinkServer TS200 老服务器做RAID1,硬盘为: 2块3T RAID 设定里显示: 制作RAID1 只有700G多点可做. 系统安装: 可以正常在700G ...
- 控制div固定在页面的某个位置 ,用js感觉很麻烦 CSS更好一些
CSS代码:<style type="text/css"> html,body { width:100%; height:100%; margin:0px; paddi ...
- flex RemoteObject 的两种使用方法
这里使用的是django1.6 和 postgreSQL9.0 FlashBuilder4.5 django方面就不说了,根据文档来做,建好模块,配置好数据库等等 创建 gateway 和 time ...
- GPU和CPU的区别
http://blog.csdn.net/conowen/article/details/7256260 这里有几种计算平台的Flynn分类法 GPU是SIMD 多核CPU是MIMD 硬件结果多核处理 ...
- CS224d lecture 9札记
欢迎转载.转载注明出处: http://blog.csdn.net/neighborhoodguo/article/details/47193885 近期几课的内容不是非常难.还有我的理解能力有所提高 ...
- nagios,zabbix对照
nagios/zabbix对照: nagios核心功能是监控报警.是一个轻量化的监控系统. 假设须要图标显示,须要添加图标显示插件(如pnp4nagios): 假设须要存入数据库,须要对应的插件(ND ...
- SpringBoot与Dubbo整合-项目搭建
本章节建立生产者和消费者来演示dubbo的demo 生产者:springboot-dubbo-provider 和 消费者:springboot-dubbo-consumer 工程配置详解 Apach ...
- Lua 是一个小巧的脚本语言
Redis进阶实践之七Redis和Lua初步整合使用 一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运 ...
- IOS打包发布APP的所有详细流程
其他一些不错的参考:点击打开链接 一.申请苹果开发者账号 首先需要申请苹果开发者账号才能在APP store 里发布应用. 开发者账号分为:(1)个人开发者账号 (2)企业开发者账号 主要的区 ...
- Sparse Autoencoder(二)
Gradient checking and advanced optimization In this section, we describe a method for numerically ch ...