UVa 699 The Falling Leaves(遞歸建樹)
阿新 • • 發佈:2018-02-15
page 得到 break case 也會 slist 註意 stream pan
UVa 699 The Falling Leaves(遞歸建樹)
假設一棵二叉樹也會落葉 而且葉子只會垂直下落 每個節點保存的值為那個節點上的葉子數 求所有葉子全部下落後 地面從左到右每堆有多少片葉子
和UVa 839 -- Not so Mobile(樹的遞歸輸入)有點像 都是遞歸輸入的 一個節點(設水平位置為p) 則它的左右兒子節點的水平位置分別為 p-1 p+1 也是可以邊輸入邊處理的 輸入完也就得到答案了 註意每個樣例後面都有一個空行 包括最後一個
1 #include<iostream> 2 #include<cstring> 3using namespace std; 4 const int maxn = 205; 5 int sum[maxn]; 6 void build(int p) 7 { 8 int v; 9 cin>>v; 10 if(v == -1) return; 11 sum[p] += v; 12 build(p-1);build(p+1); 13 } 14 15 bool init() 16 { 17 int v; 18 cin>>v; 19 if(v == -1) return false; 20 memset(sum,0,sizeof(sum)); 21 sum[maxn/2] += v; 22 build(maxn/2-1);build(maxn/2+1); 23 return true; 24 } 25 26 int main() 27 { 28 int kase = 0; 29 while(init()) 30 { 31 int p=0; 32 while(sum[p] == 0) p++; 33 cout<<"Case "<<++kase<<":"<<endl; 34 for(int i=p;;i++) 35 { 36 if(sum[i] == 0) 37 { 38 cout<<endl<<endl;break; 39 } 40 if(i!=p) cout<<" "; 41 cout<<sum[i]; 42 } 43 } 44 return 0; 45 }
UVa 699 The Falling Leaves(遞歸建樹)