Uva 839 天平问题(模板题)

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 figure illustrates a simple mobile. It is just a wire,suspended by a string, with an object on each side.

   It canalso be seen as a kind of lever with the fulcrum on the point where the string ties the wire. From thelever principle we know that to balance a simple mobile the product of the weight of the objects bytheir distance to the fulcrum must be equal. That is Wl × Dl = Wr × Dr where Dlis the left distance,Dr is the right distance, Wlis the left weight and Wr is the right weight.In a more complex mobile the object may be replaced by a sub-mobile, as shown in the next figure.In this case it is not so straightforward to check if the mobile is balanced so we need you to write aprogram that, given a description of a mobile as input, checks whether the mobile is in equilibrium ornot.


Input

The input begins with a single positive integer on a line by itself indicating the numberof the cases following, each of them as described below. This line is followed by a blankline, and there is also a blank line between two consecutive inputs.The input is composed of several lines, each containing 4 integers separated by a single space.The 4 integers represent the distances of each object to the fulcrum and their weights, in the format:Wl Dl Wr DrIf Wl or Wr is zero then there is a sub-mobile hanging from that end and the following lines definethe the sub-mobile. In this case we compute the weight of the sub-mobile as the sum of weights ofall its objects, disregarding the weight of the wires and strings. If both Wl and Wr are zero then thefollowing lines define two sub-mobiles: first the left then the right one.

Output

For each test case, the output must follow the description below. The outputs of twoconsecutive cases will be separated by a blank line.Write ‘YES’ if the mobile is in equilibrium, write ‘NO’ otherwise.

Sample Input

1

0 2 0 4

0 3 0 1

1 1 1 1

2 4 4 2

1 6 3 2

Sample Output

YES

思路讲解:输入一串数据构成天平,判断该天平是否平衡,利用引用传值,w的值永远为子天平的总重,可以大大简化代码量。

代码部分:

#include<iostream>
using namespace std;
bool solve(int &W){
	int W1,D1,W2,D2;
	bool b1=true;
	bool b2=true;
	cin>>W1>>D1>>W2>>D2;
	if(!W1) b1=solve(W1);
	if(!W2) b2=solve(W2);
	W=W1+W2;
	return b1 && b2 && (W1*D1== W2*D2);
} 

int main(){
	int T,W;
	cin>>T;
	while(T--){
		if(solve(W)) cout<<"YES\n"; else cout<<"NO\n";
		if(T) cout<<"\n";
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值