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的主要内容,如果未能解决你的问题,请参考以下文章

UVA839 Not so Mobile递归树

UVa 839 Not so Mobile

uva 839 Not so Mobile

Not so Mobile UVA - 839

UVA 839 Not so Mobile (递归建树 判断)

Uva 839 Not so Mobile