您的位置:首页 > 其它

UVa 839 Not so Mobile

2015-03-14 09:44 381 查看
题意:给出一个树状天平,判断其是否平衡

学习的紫书:采用递归先序输入,每个天平的格式为w1,d1,w2,d2,当w1,w2为0的时候,输入的是一个子天平。

这样每当输入一个子天平的时候,返回子天平是否平衡,同时用的是&w值传递,每次调用solve函数,w的值也会改变,就一层一层子天平的判断

递归理解起来还是很吃力,然后手推了一下样例,然后又打印中间的值来看,稍微理解一丢丢了= =

#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<algorithm>
using namespace std;

typedef long long LL;

bool solve(int &w){
int w1,w2,d1,d2;
bool b1=true,b2=true;
cin>>w1>>d1>>w2>>d2;
if(!w1) b1=solve(w1);
if(!w2) b2=solve(w2);
w=w1+w2;
//    printf("b1=%d\n",b1);
//    printf("b2=%d\n",b2);
//    printf("w=%d\n",w);
return b1&&b2&&(w1*d1==w2*d2);
}

int main()
{
int t,w;
cin>>t;
while(t--){
if(solve(w)) printf("YES\n");
else printf("NO\n");
if(t) printf("\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: