uva839 Not so Mobile



uva839 Not so Mobile_第1张图片

题意:输入一个树状天平,根据力矩相等W 1*D1=W2*D2 的原则判断是否平衡,每个砝码下面可能有子天平,整个天平的平衡的条件是所有天平都平衡。

然后注意输入满足树的先序遍历,就是递归输入。

思路:这里有一个引用传值,用法很巧,使代码精简了不少。

#include<bits/stdc++.h>
using namespace std;
int flag;
bool  solve(int& m1,int n1,int& m2,int n2)
{
    bool b1=true,b2=true;
    if(m1==0){
        int a[4];
        cin>>a[0]>>a[1]>>a[2]>>a[3];
        b1=solve(a[0],a[1],a[2],a[3]);
        m1=a[0]+a[2];
    }
    if(m2==0){
        int a[4];
        cin>>a[0]>>a[1]>>a[2]>>a[3];
        b2=solve(a[0],a[1],a[2],a[3]);
        m2=a[0]+a[2];
    }
    return b1&&b2&&(m1*n1==m2*n2);
}

int main()
{
    int T;cin>>T;
    while(T--){
       int a,b,c,d;cin>>a>>b>>c>>d;
       if(solve(a,b,c,d)) cout<<"YES"<<endl;
       else cout<<"NO"<<endl;
       if(T) cout<<endl;
    }
}



你可能感兴趣的:(uva839 Not so Mobile)