题解【UVA839】天平 Not so Mobile
Description

Input

Output

Examples
Input
1
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2
Output
YES
Translation
输入一个树状天平,根据力矩相等原则判断是否平衡。
采用递归(先序)方式输入:每个天平格式为\(W_l,D_l,W_r,D_r\),当\(W_l\)或\(W_r\)为\(0\)时,表示该“砝码”实际是一个子天平,接下来会描述这个子天平。当\(W_l=W_r=0\)时,会先描述左子天平,然后是右子天平。
其正确输出为\(YES\),否则输出\(NO\)。
Solution
这道题目的输入就采取了递归方式定义,所以编写一个递归函数进行输入比较自然。实际上,在输入的过程中就可以完成判断。由于使用了引用传值,因此,代码很精简。
本题极为重要,是递归的好题。
Code
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
using namespace std;
inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar();}
return f * x;
}
int t, y;//t为询问总数,y为子天平的总重量
bool pd(int &x)//输入一个子天平,返回子天平是否平衡,参数x为当前子天平的总重量
{
int a, b, c, d;//输入顺序同题目翻译
bool f = true, fl = true;//判断有没有子天平
a = gi(), b = gi(), c = gi(), d = gi();//输入
if (!a) f = pd(a);//左边有子天平
if (!c) fl = pd(c);//右边有子天平
x = a + c;//修改总重量
return (f && fl && (a * b == c * d));//进行判断
}
int main()//进入主函数
{
t = gi();//输入数据组数
while (t--)
{
if (pd(y)) puts("YES");//如果合法就输出YES
else puts("NO");//否则输出NO
if (t) puts("");//每组数据用空行隔开,最后一组数据后不要输出空行
}
return 0;//结束主函数
}
题解【UVA839】天平 Not so Mobile的更多相关文章
- 题解报告:poj 1195 Mobile phones(二维BIT裸题)
Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...
- The Balance(母函数)
The Balance Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- UVa839 Not so Mobile
我的解法: 建树,递归判断 #include<cstdio> #include<cstring> #include<iostream> #include< ...
- 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 ...
- 二叉树的递归遍历 天平UVa839
题意:输入一个树状的天平,利用杠杆原理,根据力矩是否相等(W1D1==W1D2)判断天平是否平衡 解题思路:1.由于判断天平是否平衡,当W1和W2都为0的时候,会先输入左子树,再输入右子树 2.此时的 ...
- 递归输入与引用传值(UVa839 Not so Mobile)
题目的大意是一个树形天平,输入给出样例的个数,然后空一行,每行4个数W1,D1,W2,D2,分别代表天平左侧的重量.力臂和天平右侧的重量.力臂.如果W1或者W2为0,则代表该节点有左子树或右子树,如果 ...
- UVA - 12166 Equilibrium Mobile (修改天平)(dfs字符串表示的二叉树)
题意:问使天平平衡需要改动的最少的叶子结点重量的个数. 分析:天平达到平衡总会有个重量,这个重量可以由某个叶子结点的重量和深度直接决定. 如下例子: 假设根结点深度为0,结点6深度为1,若以该结点为基 ...
- UVa 1354 天平难题 Mobile Computing
整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 考虑不要重复计算,有一个vis 数组 预处理可以先计算出一棵树的重量,简化计 ...
- [题解]SP703 SERVICE - Mobile Service_Done
设计状态F[i][j][k]代表完成任务i后,有一个员工在地点P[i],其他两人分别在j和k两地.所需要的最小代价. 转移的方式: 分别考虑派遣i,j,k三人前往下一个需求地点,并更新状态. #inc ...
随机推荐
- LTC
LTC 即 L2C,Leads To Cash,从线索到现金的企业运营管理思想,是以企业的营销和研发两大运营核心为主线,贯穿企业运营全部流程,深度融合了移动互联.SaaS技术.大数据与企业运营智慧,旨 ...
- 图片选择并使用base64展示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- so the first day
welcome to the world it sucks but you gona love it
- springboot~gradle4.7之后的lombok引用方法
在gradle4.7以后对于加入依赖lombok方式发生变化,gradle4.7版本以前,可以直接如下引用: compile("org.projectlombok:lombok:1.18.2 ...
- ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
原文:https://www.stevejgordon.co.uk/httpclientfactory-using-polly-for-transient-fault-handling发表于:2018 ...
- JavaSE学习笔记(1)---数据类型、运算符、控制结构
javaSE学习笔记(1) 数据类型和运算符 1.注释可以提高程序的可读性.可划分为 单行注释 // 多行注释 /.../ 文档注释 /**...*/ 2.标识符的命名规则: 标识符必须以字母.下划线 ...
- jenkins - docker搭建jenkins
jenkins镜像拉取 docker pull jenkins/jenkins 为jenkins镜像分配容器 docker run -d --name jenkins \ -p 8080:8080 \ ...
- 转载:dsp芯片的定点运算
转自: http://ishare.iask.sina.com.cn/f/37179153.html
- SpringMVC处理中文乱码
SpringMVC自带过滤器 添加至web.xml文件 <filter> <filter-name>encoding</filter-name> <filte ...
- Java基础知识点总结笔记
面向对象的三大特性 继承:一般只能单继承,内部类实现多继承,接口可以多继承 封装:访问权限控制public>protected>包>private内部类也是一种封装 多态:编译时多态 ...