uva 699 The Falling Leaves

2014-11-24 08:35:48 · 作者: · 浏览: 0

链接:http://uva.onlinejudge.org/index.php option=com_onlinejudge&Itemid=8&category=8&page=show_problem&problem=640

题意是模拟一颗“落叶树”,母结点和子节点的水平距离是1。求从左到到右每列的落叶总数。

挺水的一道题,当时就直接想到哪写到哪了。

直接建立一颗二叉树,用数组来统一每列的落叶数,根结点对应于数组中央。

代码:

#include
  
   
#include
   
     #include
    
      #include
     
       #include
       #include
       
         #include
        
          #include
         
           #include
          
            #include
           
             #include
            
              #define PI acos(-1.0) #define maxn 300 #define INF 1<<25 #define MAX 0x7fffffff typedef long long ll; using namespace std; struct Node { int v; int step; Node *lchild; Node *rchild; }; Node *root; int ans[maxn]; int Min,Max; int Buildtree(Node *&node,int step) { node=(Node*)malloc(sizeof(Node)); int x; scanf("%d",&x); if(x==-1) return 0; node->v=x; ans[step]+=x; if(step
             
              Max) Max=step; Buildtree(node->lchild,step-1); Buildtree(node->rchild,step+1); } int main() { int x; int ii=1; while(scanf("%d",&x)&&x!=-1) { Min=100; Max=100; memset(ans,0,sizeof(ans)); root=(Node*)malloc(sizeof(Node)); root->v=x; root->step=100; ans[root->step]+=root->v; Buildtree(root->lchild,99); Buildtree(root->rchild,101); printf("Case %d:\n",ii++); bool jud=0; for(int i=Min; i<=Max; i++) { if(ans[i]!=0&&jud==0) { jud=1;printf("%d",ans[i]); } else if(ans[i]!=0) printf(" %d",ans[i]); } printf("\n"); printf("\n"); } }