[2016-02-09][UVA][839][Not so Mobile]
[2016-02-09][UVA][839][Not so Mobile]
- 时间:2016-02-09 12:10:40 星期二
- 题目编号:UVA 839
- 题目大意:给定一个秤,已知秤两边的重量和到支点的距离,问秤能否平衡
- 分析:每个秤都是一个树的结构,只需要遍历一遍,看每个分支点能否平衡即可
- 方法:根绝输入,dfs下去,判断每个节点是否平衡即可
- 解题过程遇到问题:
- 刚开始,不平衡,返回值设置成0,没考虑为0的情况,不平衡的时候 改成返回-1就AC了.
- 刚开始忘记输出每组数据之间的空行
- 这里写法把整棵树都遍历了一遍,事实上,当出现不平衡的点,读取完数据之后,就可以直接返回了,没必要在进行其他操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <vector>#include <list>#include <map>#include <set>#include <deque>#include <queue>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <cctype>#include <string>#include <cstring>#include <cstdio>#include <cmath>#include <cstdlib>#include <ctime>using namespace std;int solve(){ //平衡返回支点的总重量,否则返回-1 int lw,ld,rw,rd; scanf("%d%d%d%d",&lw,&ld,&rw,&rd); if(!lw) lw = solve(); if(!rw) rw = solve(); return lw*ld == rw*rd?lw+rw:-1;}int main(){ int cntcase; scanf("%d",&cntcase); while(cntcase--){ if(~solve()) puts("YES"); else puts("NO"); if(cntcase) puts(""); } return 0;} |
浙公网安备 33010602011771号