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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步