UVA 839 Not so Mobile
Posted fzfn5049
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 839 Not so Mobile相关的知识,希望对你有一定的参考价值。
题目不是很难,就是要去仔细思考一下过程。
首先要明白题目没有给你数据范围,也就是我们的数据不可能用数组来保存,只能动态地去保存。
于是我们自然就可以仿照我们正常的二叉树的建树过程,按照四种情况讨论一下就可以了。
flag用来记录每个子树是否满足条件。
注意读题,小心PE。
1 #include <stdio.h> 2 #include <string.h> 3 //这题目有个思路就是不能用数组,但是要向数组一下进行递归,就是左边一次,右边一次 4 int flag; //flag = 1说明我们应该是输出的YES 5 int t; 6 7 long long dfs() 8 { 9 long long wl, dl, wr, dr; 10 scanf("%lld%lld%lld%lld", &wl, &dl, &wr, &dr); 11 12 if(wl == 0 && wr == 0) 13 { 14 wl += dfs(); 15 wr += dfs(); 16 //printf("----%d %d\n", wl, wr); 17 18 if(dl * wl != wr * dr) 19 { 20 flag = 0; 21 } 22 long long sum = wl+wr; 23 return sum; 24 } 25 26 else if(wl == 0 && wr != 0) 27 { 28 wl += dfs(); 29 30 if(dl * wl != wr * dr) 31 { 32 flag = 0; 33 } 34 35 long long sum = wl+wr; 36 return sum; 37 } 38 39 else if(wl != 0 && wr == 0) 40 { 41 wr += dfs(); 42 43 if(dl * wl != wr * dr) 44 { 45 flag = 0; 46 } 47 48 long long sum = wl+wr; 49 return sum; 50 } 51 52 else if(wl != 0 && wr != 0) 53 { 54 if(dl * wl != wr * dr) 55 { 56 flag = 0; 57 } 58 59 //printf("----%lld %lld\n", wl, wr); 60 61 long long sum = wl+wr; 62 return sum; 63 } 64 65 } 66 67 68 int main() 69 { 70 scanf("%d", &t); 71 long long wl, dl, wr, dr; 72 while(t--) 73 { 74 //printf("\n"); 75 scanf("%lld%lld%lld%lld", &wl, &dl, &wr, &dr); 76 flag = 1; 77 78 if(wl == 0 && wr == 0) 79 { 80 wl += dfs(); 81 wr += dfs(); 82 //printf("----%lld %lld\n", wl, wr); 83 84 if(dl * wl == wr * dr) 85 { 86 if(flag == 1) 87 printf("YES\n"); 88 else 89 printf("NO\n"); 90 } 91 92 else 93 printf("NO\n"); 94 95 //printf("---%d\n", flag); 96 97 } 98 99 else if(wl == 0 && wr != 0) 100 { 101 wl += dfs(); 102 103 if(dl * wl == wr * dr) 104 { 105 if(flag == 1) 106 printf("YES\n"); 107 else 108 printf("NO\n"); 109 } 110 111 else 112 printf("NO\n"); 113 } 114 115 else if(wl != 0 && wr == 0) 116 { 117 wr += dfs(); 118 119 if(dl * wl == wr * dr) 120 { 121 if(flag == 1) 122 printf("YES\n"); 123 else 124 printf("NO\n"); 125 } 126 127 else 128 printf("NO\n"); 129 } 130 131 else if(wl != 0 && wr != 0) 132 { 133 if(dl * wl == wr * dr) 134 { 135 if(flag == 1) 136 printf("YES\n"); 137 else 138 printf("NO\n"); 139 } 140 141 else 142 printf("NO\n"); 143 } 144 if(t) 145 printf("\n"); 146 } 147 return 0; 148 }
以上是关于UVA 839 Not so Mobile的主要内容,如果未能解决你的问题,请参考以下文章