例题6-9 天平 UVa 839 递归

Not soMobile 

Before being an ubiquous communications gadget, amobile was just a structure made of strings and wiressuspending colourfull things. This kind of mobile is usually foundhanging 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 beseen as a kind of lever with the fulcrum on the point where thestring ties the wire. From the lever principle we know that tobalance 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 Dl is the left distance,Dr is the rightdistance, Wl is theleft weight and Wr isthe right weight.


In a more complex mobile the object may be replaced by asub-mobile, as shown in the next figure. In this case it is not sostraightforward to check if the mobile is balanced so we need youto 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 byitself indicating the number of the cases following, each of themas described below. This line is followed by a blank line, andthere is also a blank line between two consecutive inputs.


The input is composed of several lines, each containing 4integers separated by a single space. The 4 integers represent thedistances of each object to the fulcrum and their weights, in theformat: Wl Dl Wr Dr

If Wl orWr is zero then thereis a sub-mobile hanging from that end and the following linesdefine the the sub-mobile. In this case we compute the weight ofthe sub-mobile as the sum of weights of all its objects,disregarding the weight of the wires and strings. If bothWl and Wr are zero then the followinglines define two sub-mobiles: first the left then the rightone.

Output 

For each test case, the output must follow the descriptionbelow. The outputs of two consecutive cases will be separated by ablank line.


Write `YES' if the mobile is in equilibrium, write`NO' otherwise.

SampleInput 


0 2 0 4 
0 3 0 1 
1 1 1 1 
2 4 4 2 
1 6 3 2

SampleOutput 

YES

分析:递归求解,输入是递归先序输入。一个节点的重量是其子树的重量和,所以需要加起来才能判断某个节点的重量


#include<iostream>
using namespace std;
bool solve(int& w)
{
    int w1,d1,w2,d2;
    bool b1=true,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、付费专栏及课程。

余额充值