怎样经营好一个网站,百度数据,延庆精神文明建设的门户网站,网站 第三方登录题目链接
https://vjudge.net/problem/UVA-839
题目大意
输入一个树状天平#xff0c;根据力矩相等原则判断是否平衡。如图6-5所示#xff0c;所谓力矩相等#xff0c;就是WlDlWrDr#xff0c;其中Wl和Wr分别为左右两边砝码的重量#xff0c;D为距离。
采用递归#…题目链接
https://vjudge.net/problem/UVA-839
题目大意
输入一个树状天平根据力矩相等原则判断是否平衡。如图6-5所示所谓力矩相等就是WlDlWrDr其中Wl和Wr分别为左右两边砝码的重量D为距离。
采用递归先序方式输入每个天平的格式为WlDlWrDr当Wl或Wr为0时表示该“砝码”实际是一个子天平接下来会描述这个子天平。当WlWr0时会先描述左子天平然后是右子天平。
解题思路
这道题输入就采用了先序递归的方式所以在实现的时候也可以采取先序递归的方式接收输入。 判断的过程显然可以用递归比较方便先判断左子树左子天平然后判断右子树右子天平最后判断整个天平这显然是后序遍历顺序。 其实我们无需显式建树隐式建树即可。先序建树后序判断同时进行。判断结果的布尔值通过函数返回值返回力矩值通过引用变量传出。
代码
#include bits/stdc.h
using namespace std;
using ll long long;
using ull unsigned long long;
using ld long double;
#define endl \n;
const int maxn 1e3 10;
const int INF 0x3fffffff;
const int mod 1e9 7;bool isBalance(int w) { // 无需显式建树隐式建树即可。先序建树后序判断同时进行。int w1, d1, w2, d2;cin w1 d1 w2 d2;bool b1 true, b2 true;if (!w1)b1 isBalance(w1);if (!w2)b2 isBalance(w2);w w1 w2;return b1 b2 (w1 * d1 w2 * d2);
}void solve() {int w;if (isBalance(w))cout YES\n;elsecout NO\n;
}int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout fixed;cout.precision(18);int Case 1;cin Case;while (Case--) {solve();if (Case)cout \n;}return 0;
}