UVA 839 Not so Mobile
思路:
记得自己画个图。
1 // 题意:输入一个树状天平,根据力矩相等原则判断是否平衡。采用递归方式输入,0表示中间结点
2 // 算法:在“建树”时直接读入并判断,并且无须把树保存下来
3 #include<iostream>
4 using namespace std;
5 /*
6 先序输入
7 如果输入 0 2 0 4
8 cin>>W1>>D1>>W2>>D2
9 w1=0说明此位置还是一个节点,两边没有砝码,
10 所以继续递归,直到w1!=0,两边是砝码,然后根据距离和砝码算是否平衡
11 每次递归引用w,不停修改,w就是此位置的砝码的总质量
12 */
13 // 输入一个子天平,返回子天平是否平衡,参数W修改为子天平的总重量
14 bool solve(int& W) {
15 int W1, D1, W2, D2;
16 bool b1 = true, b2 = true;
17 cin >> W1 >> D1 >> W2 >> D2;
18 if (!W1) b1 = solve(W1);
19 if (!W2) b2 = solve(W2);
20 W = W1 + W2;//修改此位置的砝码的总质量
21 return b1&&b2 && (W1*D1 == W2*D2);
22 }
23
24 int main() {
25 int T, W;
26 cin >> T;
27 while (T--) {
28 if (solve(W)) cout << "YES\n"; else cout << "NO\n";
29 if (T) cout << "\n";
30 }
31 return 0;
32 }
转载于//www.cnblogs.com/fudanxi/p/10534283.html
还没有评论,来说两句吧...