标签:
题意:这是一个类似于树的天平,这个天平的每一端都有可能由一个子天平构成,而每个天平都满足一个公式 WL * DL = WR * DR,其中WL,WR分别代表左边和右边物品的重量,DL,DR分别代表左边和右边物品里天平中心的距离。
输入分析:对于每个输入的四个数,如果WL或WR为0时,则代表接下来的输入代表子天平的数据,如果WL和WR同时为0,则输入数据先描述左子天平的状态,其次是右子天平。
要求:判断该数据是否可以构成一个平衡的天平。
思路:根据这个天平的描述,我很自然的想到了递归,有点类似于二叉树的后续遍历。对每一个子天平都需判断是否能够构成平衡,只要有一个不行,就需要输出“NO”;否则输出“YES”。
/* UvaOJ 839 Emerald Thu 28 May 2015 */ #include <iostream> #include <cstring> #include <cstdio> using namespace std; bool isEqual; // means the status is equal int Moblie() { int leftWeight, leftDis, rightWeight, rightDis; scanf( "%d%d%d%d", &leftWeight, &leftDis, &rightWeight, &rightDis ); leftWeight = leftWeight == 0 ? Moblie() : leftWeight; rightWeight = rightWeight == 0 ? Moblie() : rightWeight; if( leftWeight * leftDis != rightWeight * rightDis ) { isEqual = false; } return leftWeight + rightWeight; } // return the totalWeight int main() { int T; cin >> T; while( T -- ) { isEqual = true; Moblie(); printf("%s\n", isEqual ? "YES" : "NO" ); if( T != 0 ) { printf("\n"); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/Emerald/p/4537084.html