UVA 699 The Falling Leaves

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 699 The Falling Leaves相关的知识,希望对你有一定的参考价值。

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#include<string>
#include<math.h>
#include<stack>
#include<cstdlib>
#include<map>
#include<algorithm>
#include<cctype>
#include<sstream>

typedef long long ll;
using namespace std; 
const int MAXN = 50000; 
int sum[MAXN],pos,kase;

void build(int p){
    int l,r;
    
    scanf("%d",&l);
    if(l != -1){
        sum[p-1] += l;
        build(p-1);    
    }
    
    scanf("%d",&r);
    if(r != -1){
        sum[p+1] += r;
        build(p+1);    
    }
}
void print(){
    int p = 0;
    while(!sum[p]) p++;
    
    printf("Case %d:\n",kase++);
    bool f = true;
    while(sum[p]){
        if(f)    printf("%d",sum[p++]);
        else     printf(" %d",sum[p++]);
        f = false;
    }
    printf("\n\n");  // 输出格式坑爹
}

int main(){
    
    kase = 1;
    int x;
    while(scanf("%d",&x) != EOF && x != -1){
        memset(sum,0,sizeof(sum));
        pos = MAXN/2;
        
        sum[pos]+=x;
        build(pos);
            
        print();
    }
    return 0;
}

。。。。。。。

 

刘汝佳的:

 

// UVa699 The Falling Leaves
// Rujia Liu
// 题意:给一棵二叉树,每个节点都有一个水平位置:左儿子在它左边1个单位,右儿子在右边1个单位。从左向右输出每个水平位置的所有结点的权值之和。按照递归方式输入,-1表示空树
// 算法:在“建树”的同时计算,无须真正的把树保存下来

#include<cstring>
#include<iostream>
using namespace std;

const int maxn = 200;
int sum[maxn];

// 输入并统计一棵子树,树根水平位置为p
void build(int p) {
  int v;
  cin >> v;
  if(v == -1) return; // 空树
  sum[p] += v;
  build(p - 1);
  build(p + 1);
}

// 边读入边统计
bool init() {
  int v;
  cin >> v;
  if(v == -1) return false;

  memset(sum, 0, sizeof(sum));
  int pos = maxn/2; // 树根的水平位置
  sum[pos] = v;
  build(pos - 1); // 左子树
  build(pos + 1); // 右子树
  return true;
}

int main() {
  int kase = 0;
  while(init()) {
    int p = 0;
    while(sum[p] == 0) p++; // 找最左边的叶子

    // 开始输出。因为要避免行末多余空格,所以稍微麻烦一点
    cout << "Case " << ++kase << ":\n" << sum[p++];
    while(sum[p] != 0) {
      cout << " " << sum[p];
      p++;
    }
    cout << "\n\n";
  }
  return 0;
}

 

以上是关于UVA 699 The Falling Leaves的主要内容,如果未能解决你的问题,请参考以下文章

UVA699 UVALive5471 The Falling Leaves树权和

下落的树叶 (The Falling Leaves UVA - 699)

The Falling Leaves UVA - 699

UVa 699 The Falling Leaves(递归建树)

Uva 699The Falling Leaves

UVa699 - The Falling Leaves