UVa 839 (递归方式读取二叉树) Not so Mobile
题意:
递归的方式输入一个树状天平(一个天平下面挂的不一定是砝码还可能是一个子天平),判断这个天平是否能满足平衡条件,即W1 * D1 == W2 * D2.
递归的方式处理输入数据感觉很巧妙,我虽然能理解,但自己是写不出来的。
这里的参数是传引用,所以是在递归回来的时候才会赋值的。
1 //#define LOCAL 2 #include <iostream> 3 using namespace std; 4 5 bool solve(int& w) 6 { 7 int w1, d1, w2, d2; 8 bool ok1 = true, ok2 = true; 9 cin >> w1 >> d1 >> w2 >> d2; 10 if(!w1) ok1 = solve(w1); 11 if(!w2) ok2 = solve(w2); 12 w = w1 + w2; 13 return ok1 && ok2 && (w1*d1 == w2*d2); 14 } 15 16 int main(void) 17 { 18 #ifdef LOCAL 19 freopen("839in.txt", "r", stdin); 20 #endif 21 22 int T, w; 23 cin >> T; 24 while(T--) 25 { 26 if(solve(w)) cout << "YES\n"; 27 else cout << "NO\n"; 28 if(T) cout << endl; 29 } 30 31 return 0; 32 }