标签:
题意:给出一个树状天平,判断其是否平衡
学习的紫书:采用递归先序输入,每个天平的格式为w1,d1,w2,d2,当w1,w2为0的时候,输入的是一个子天平。
这样每当输入一个子天平的时候,返回子天平是否平衡,同时用的是&w值传递,每次调用solve函数,w的值也会改变,就一层一层子天平的判断
递归理解起来还是很吃力,然后手推了一下样例,然后又打印中间的值来看,稍微理解一丢丢了= =
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<algorithm> 6 using namespace std; 7 8 typedef long long LL; 9 10 bool solve(int &w){ 11 int w1,w2,d1,d2; 12 bool b1=true,b2=true; 13 cin>>w1>>d1>>w2>>d2; 14 if(!w1) b1=solve(w1); 15 if(!w2) b2=solve(w2); 16 w=w1+w2; 17 // printf("b1=%d\n",b1); 18 // printf("b2=%d\n",b2); 19 // printf("w=%d\n",w); 20 return b1&&b2&&(w1*d1==w2*d2); 21 } 22 23 int main() 24 { 25 int t,w; 26 cin>>t; 27 while(t--){ 28 if(solve(w)) printf("YES\n"); 29 else printf("NO\n"); 30 if(t) printf("\n"); 31 } 32 return 0; 33 }
标签:
原文地址:http://www.cnblogs.com/wuyuewoniu/p/4337049.html