UVA 12166 Equilibrium Mobile】的更多相关文章

题意: 给出数个天平,每个天平的结构都类似于二叉树,只有左右重量都相等时才平衡,求每个天平最少改多少个秤砣,也就是叶子结点可以使得整个天平平衡.天平的深度不超过16. 分析: 要使得改动的数量最少,那么就至少有一个秤砣不变,然后以这个秤砣为基准来调整整个天平.天平的结构是二叉树,那么由此我们可以得出,如果以深度为d重量为w的秤砣为基准,那么整个天平的重量就是w * pow(2, d),即w << d.当然,可能会有一些秤砣算出的以各自为基准的天平总重量相同,设天平总重量为sum,那么这些秤砣的…
直接贪心.先想想最后平衡的时候,如果知道了总重量,那么每一个结点的重量其实也就确定了. 每个结点在左在右其实都不影响,只和层数有关.现在反过来,如果不修改某个结点,那么就可以计算出总质量,取总质量出现次数最多的保持不变. /********************************************************* * --------------Tyrannosaurus--------- * * author AbyssalFish * ****************…
题意:问使天平平衡需要改动的最少的叶子结点重量的个数. 分析:天平达到平衡总会有个重量,这个重量可以由某个叶子结点的重量和深度直接决定. 如下例子: 假设根结点深度为0,结点6深度为1,若以该结点为基准(该结点值不变),天平要平衡,总重量是12(6 << 1),而若以结点3为基准,天平要平衡,总重量也是12(3 << 2). 由此可得,只需要算出以每个结点为基准的总重量,若该重量下对应的叶子结点最多,则使天平在此重量下平衡改变的叶子结点数最少. #pragma comment(li…
题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //#define _XIENAOBAN_ #include<cstdio> #include<cstring> #include<map> int T; int total; std::map<long long, int> leaf; void build(int…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举一个秤砣的重量不变. 某一个秤砣的重量不变之后. 所有秤砣的重量就固定了. 因为它的兄弟节点的重量要和它一样. 则父亲节点的重量就是这个节点的两倍了. 以此类推可以得到所有节点的重量的值. 第i层应该的重量都是相同的. 用一个map[height][x]统计某层里面有多少个数字x即可. 这样只要循环层数次就好. 复杂度够过了. [代码] /* 1.Shoud it use long long ? 2.Have you eve…
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3318 题意:给一个深度不超过16的二叉树,代表一个天平.每根杆悬挂在中间,每个秤砣的重量已知,至少修改多少个秤砣的重量才能让天平平衡? 要让天平平衡,必须以其中一个秤砣作为标准,然后修改其余的秤砣.当以深度为d,值为x的叶子节点作为标准时,可以发现此时天平的总质量为x<<d.…
基本思路就是Bfs: 本题的一个关键就是如何判段状态重复. 1.如果将状态用一个int型数组表示,即假设为int state[17],state[0]代表机器人的位置,从1到M从小到大表示障碍物的位置.那么如果直接用STL中的set是会超时的,但如果自己建立一个hash方法,像这样: int getKey(State& s) { long long v = 0; for(int i=0; i<=M; ++i ) { v = v * 10 + s[i]; } return v % hashSi…
题目大意:改变二叉树上的权值,使树平衡,问最少该几个值. 题目分析:不会做,查的题解.有条奇妙的性质:如果将第d层权值为w的节点为基准做改动,则整棵树的总重量为w<<d,即w*2^d.仔细一想,确实是这样的. 代码如下: # include<iostream> # include<cstdio> # include<map> # include<cstring> # include<algorithm> using namespace…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 秤砣都是在叶子节点. 可以把它看成一个二叉树. 则我们每次只需要选择任意两个"节点",让他们组成一棵二叉树就可以了. 然后虚拟出来一个节点,代表这个子树的根节点. 每次维护一下每个子树的左子树最左端离树的中心距离以及最右端离树的中心的距离即可. 虚拟生成的节点作为一个新的节点动态加入即可.(它的子孙节点们不再可用) (这样的搜索策略,可以保证所给节点最后都在叶子节点处) (注意不一定新的虚拟节点的最右端就由右子树得到.…
Not so Mobile  Before being an ubiquous communications gadget, a mobile was just a structure made of strings and wires suspending colourfull things. This kind of mobile is usually found hanging over cradles of small babies.       (picture copy failed…
UVA.839 Not so Mobile ( 二叉树 DFS) 题意分析 给出一份天平,判断天平是否平衡. 一开始使用的是保存每个节点,节点存储着两边的质量和距离,但是一直是Runtime error.也不知道到底是哪里出了问题,后来发现直接判断当前是否平衡,若下面还有节点,接着递归调用dfs判断,这样一来省去了存储节点所需要的空间和时间,效率大大提升. 代码总览 #include <iostream> #include <cstdio> #include <cstring…
UVa 839 Not so Mobile(树的递归输入) 判断一个树状天平是否平衡,每个测试样例每行4个数 wl,dl,wr,dr,当wl*dl=wr*dr时,视为这个天平平衡,当wl或wr等于0是,下一行将是一个子天平,如果子天平平衡,wl为子天平的wl+wr ,否则整个天平不平衡 #include<iostream> using namespace std; bool solve(int &w) { int wl,dl,wr,dr; cin>>wl>>dl…
Before being an ubiquous communications gadget, a mobilewas just a structure made of strings and wires suspendingcolourfull things. This kind of mobile is usually found hangingover cradles of small babies.The gure illustrates a simple mobile. It is j…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5…
传送门1(UVa): https://uva.onlinejudge.org/external/13/1354.pdf 传送门2(GOJ): http://acm.gdufe.edu.cn/Problem/read/id/1320 题意: 长度限制 r (1 < r < 10), 给 n (1 <= n <= 6) 个砝码,组成平衡(考虑重量和力臂)的天平,求天平最长能多长. 2015个人选拔赛#6 1004 比赛的时候完全不知道怎么做,比赛完两天重新看一遍有点思路就是敲不出来(弱…
**1354 Mobile Computing** There is a mysterious planet called Yaen, whose space is 2-dimensional. There are many beautiful stones on the planet, and the Yaen people love to collect them. They bring the stones back home and make nice mobile arts of th…
整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 考虑不要重复计算,有一个vis 数组 预处理可以先计算出一棵树的重量,简化计算#include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; const int maxn=6; int w[6];//各个重量 i…
0.最后输出的yes no的大小写 1.注意 递归边界   一直到没有左右子树 即b1=b2=false的时候 才返回 是否 天平平衡. 2.注意重量是利用引用来传递的 #include <iostream> using namespace std; bool solve(int& W) { bool b1=true,b2=true; int wl,dl,wr,dr; cin>>wl>>dl>>wr>>dr; ) b1=solve(wl)…
题意: 递归的方式输入一个树状天平(一个天平下面挂的不一定是砝码还可能是一个子天平),判断这个天平是否能满足平衡条件,即W1 * D1 == W2 * D2. 递归的方式处理输入数据感觉很巧妙,我虽然能理解,但自己是写不出来的. 这里的参数是传引用,所以是在递归回来的时候才会赋值的. //#define LOCAL #include <iostream> using namespace std; bool solve(int& w) { int w1, d1, w2, d2; bool…
题目链接 题意: 在一个宽为r 的房间里, 有s个砝码, 每个天平的一端要么挂砝码, 要么挂另一个天平, 并且每个天平要保持平衡. 求使得所有砝码都放在天平上, 且总宽度不超过房间宽度的最大值. 思路: 每个节点只能有两个子节点, 这是一棵二叉树的形式. 通过枚举二叉树的形态, 再枚举每一个叶子节点所放砝码, 最后再计算每个方案的宽度并计算答案. 每增加一个天平, 那么可以放砝码数 + 1. note: 坑在0的输出了, 用primtf("%.9lf\n", 0)输出来的是0  用0.…
经典问题,矩形面积并. 解法:一.矩形分割,每个矩形的两个横坐标和两个纵坐标排序,这样得到2n*2n个区间,对这些区间依次判断是否包含在n个矩形中间即可.      二.扫描线.具体还没实现过. 详见:http://www.algorithmist.com/index.php/UVa_688 另:http://www.ii.uni.wroc.pl/boi/index.phtml?id=11 #include <iostream> #include <cstdio> #include…
题意:判断某个天平是否平衡,输入以递归方式给出. 题解:递归着输入,顺便将当前质量作为 &参数 维护一下,顺便再把是否平衡作为返回值传回去. 坑:最后一行不能多回车 附:天秀代码 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; bool solve(int &w) { int w1, d1, w2, d2; cin >> w1 >> d1 >> w…
题目描述: 题目思路: 1.DFS建树 2.只有每个树的左右子树都平衡整颗树才平衡 #include <iostream> using namespace std; bool solve(int& w) { int d1,w1,d2,w2; cin >> w1 >> d1 >> w2 >> d2 ; bool b1 = true ,b2 = true ; if(!w1) b1 = solve(w1) ; if(!w2) b2 = solv…
题目连接:http://acm.hust.edu.cn/vjudge/problem/19486 给你一个杠杆两端的物体的质量和力臂,如果质量为零,则下面是一个杠杆,判断是否所有杠杆平衡. 分析:递归.直接递归求解即可. #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <climit…
题目链接:https://vjudge.net/problem/UVA-839 题目大意:输入一个树状天平,根据力矩相等原则,判断是否平衡.  如上图所示,所谓力矩相等,就是Wl*Dl=Wr*Dr.  其中Wl和Wr分别为左右两边砝码的重量,D为距离 采用递归的方式输入:每个天平的格式为Wl,Dl,Wr,Dr   当Wl或Wr为0时  表示该"砝码" 实际是一个子天平  接下来会描述这个子天平.当Wl=Wr=0   会先描述左子天平  然后是右子天平. 思路:解决本道题之前一定要先弄请…
用(x,s)表示一个状态,x表示机器人的位置,s表示其他位置有没有物体.用个fa数组和act数组记录和打印路径,转移的时候判断一下是不是机器人在动. #include<bits/stdc++.h> using namespace std; ; ; +; // 2^15*15 int head[maxn],to[maxe],nxt[maxe]; int ecnt; void addEdge(int u,int v) { to[ecnt] = v; nxt[ecnt] = head[u]; hea…
只要枚举左右两个子天平砝码的集合,我们就能算出左右两个悬挂点到根悬挂点的距离. 但是题中要求找尽量宽的天平但是不能超过房间的宽度,想不到要怎样记录结果. 参考别人代码,用了一个结构体的vector,保存每个集合合法方案的左右两端最长的距离. #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <map> #include <…
#include<iostream> using namespace std; int solve(int &W) /*这里一定要用引用,为了赋给它值*/ { int wl, dl, wr, dr; cin >> wl >> dl >> wr >> dr; bool f1 = true, f2 = true; if(!wl) f1 = solve(wl); /*沿着这个子天平找下去*/ if(!wr) f2 = solve(wr); W…
Before being an ubiquous communications gadget, a mobilewas just a structure made of strings and wires suspendingcolourfull things. This kind of mobile is usually found hangingover cradles of small babies.The gure illustrates a simple mobile. It is j…
Cellular Network Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 1456 A cellular network is a radio network made up of a number of cells each served by a base station located in the cell. The base sta…