uva839


  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.

\epsfbox{p839a.eps}

The figure illustrates a simple mobile. It is just a wire, suspended by a string, with an object on each side. It can also be seen as a kind of lever with the fulcrum on the point where the string ties the wire. From the lever principle we know that to balance a simple mobile the product of the weight of the objects by their distance to the fulcrum must be equal. That isWl×Dl =Wr×Dr whereDl is the left distance,Dr is the right distance, Wl is the left weight andWr 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 a program that, given a description of a mobile as input, checks whether the mobile is in equilibrium or not.

\epsfbox{p839b.eps}

Input 

The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, 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 Dr

If Wl or Wr is zero then there is a sub-mobile hanging from that end and the following lines define the the sub-mobile. In this case we compute the weight of the sub-mobile as the sum of weights of all its objects, disregarding the weight of the wires and strings. If bothWl andWr are zero then the following 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 two consecutive 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



Jose Paulo Leal, ACM-UP'2001


#include<stdio.h>  
#include<string.h>  
int ok;
int run_tree(int W1,int D1,int W2,int D2)
{
	int w1,w2,d1,d2;
	if(W1==0)
	{
		scanf("%d%d%d%d",&w1,&d1,&w2,&d2);
		W1=run_tree(w1,d1,w2,d2);
	}
	if(W2==0)
	{
		scanf("%d%d%d%d",&w1,&d1,&w2,&d2);
		W2=run_tree(w1,d1,w2,d2);
	}
	if(ok&&W1*D1!=W2*D2)
		ok=0;
	return W1+W2;
}
main()
{
	int n,w1,w2,d1,d2;
	freopen("D:\\bbbb.txt","r",stdin);
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d%d%d",&w1,&d1,&w2,&d2);
		ok=1;
		run_tree(w1,d1,w2,d2);
		printf(ok?"YES\n":"NO\n");
		if(n!=0)  printf("\n");
	}
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值