题目描述
天平是一种衡器,是衡量物体质量的仪器。它依据杠杆原理制成,在杠杆的两端各有一小盘,一端放砝码,另一端放要称的物体,杠杆中央装有指针,两端平衡时,两端的质量(重量)相等。
现在递归地描述一个天平:
1.每个天平用两个正整数代表左右两端的质量。
2.如果左端或者右端的数字为0,代表这一端由子天平构成,那么在下一行描述这个子天平。
如:
0 0
0 2
1 1
2 2
代表天平:
一个天平平衡的条件:
1.天平的两端质量相同。
2.如果存在子天平,子天平平衡。
很显然上述天平是平衡的。
对于一个描述的天平,请判断是否达成平衡。
输入
每次测试只有一组数据。
给出一个天平,描述方式如上。
输出
如果所给天平平衡,输出“YES”,否则输出“NO”。
样例输入
0 0
0 2
1 1
2 2
样例输出
YES
#include<cstdio>
int flag;
int dfs(int a)
{
if(flag)
return 0;
if(a!=0)
return a;
else
{
int c,d;
scanf("%d%d",&c,&d);
if(c==0)
c=dfs(c);
if(d==0)
d=dfs(d);
if(d!=c)
{
flag=1;
return 0;
}
return c+d;
}
}
int main()
{
int a,b;
flag=0;
scanf("%d%d",&a,&b);
a=dfs(a);
b=dfs(b);
if(a==b&&!flag)
printf("YES\n");
else
printf("NO\n");
return 0;
}
代码转自博主大一时候acm协会带我的学长。虽然他已经退役了。但他给我的教诲我会一直牢记。
在此再次向师傅致敬。