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;
}
时间: 2024-12-23 01:52:02

UVA 699 The Falling Leaves的相关文章

[2016-02-09][UVA][699][The Falling Leaves]

时间:2016-02-09 13:29:10 星期二 题目编号:UVA 699 题目大意:  给一棵树,每棵树有一个叶子,叶子的值是点权,求叶子垂直落下后, (同一个方向的形成一堆),求每堆叶子的总权值 位置的描述:每个左子树在根左边一个单位,右子树在根右边一个单位 分析: 遍历一遍二叉树,传参保存每个二叉树的位置,最后保存即可 每行不超过80个字符,那么节点数不大于80个,堆数不大于80个 方法:dfs,递归 解题过程遇到问题: 一行数据不一定就是一颗完整的树!!!!!!! 开始还以为读取到第

UVa 699.The Falling Leaves【7月23】

The Falling Leaves Each year, fall in the North Central region is accompanied by the brilliant colors of the leaves on the trees, followed quickly by the falling leaves accumulating under the trees. If the same thing happened to binary trees, how lar

UVA 699 The Falling Leaves (二叉树水题)

本文纯属原创,转载请注明出处,谢谢.http://blog.csdn.net/zip_fan. Description Each year, fall in the North Central region is accompanied by the brilliant colors of the leaves on the trees, followed quickly by the falling leaves accumulating under the trees. If the sam

UVa 699 The Falling Leaves(递归建树)

题意  假设一棵二叉树也会落叶  而且叶子只会垂直下落   每个节点保存的值为那个节点上的叶子数   求所有叶子全部下落后   地面从左到右每堆有多少片叶子 和上一题有点像  都是递归输入的  一个节点(设水平位置为p)  则它的左右儿子节点的水平位置分别为  p-1  p+1   也是可以边输入边处理的  输入完也就得到答案了   注意每个样例后面都有一个空行  包括最后一个 #include<cstdio> #include<cstring> using namespace s

uva 699 The Falling Leaves(建二叉树同一时候求和)

本来看着挺难的.大概是由于我多瞟了一眼题解,瞬间认为简单多了.做题就得这样,多自己想想.如今是 多校联赛,然而我并不会做. .. .慢慢来,一直在努力. 分析: 题上说了做多不会超过80行.所以能够开一个数组.这里我是把根节点作为第42个数,能够在建树的同一时候求 出那一列全部数值的和左孩子节点减一,右孩子节点加一.. .写的时候中间出了点小bug,忘了给flag重置0了,调 了好久.. . 第一次提交wa了,由于没有换行,题目要求结果之间有一行空行的. . . 贴代码: #include<st

uva 699 the falling leaves——yhx

因为复制过来排版很乱,所以上截图. 1 #include<cstdio> 2 #include<cstring> 3 int sum[10010]; 4 void bd(int p) 5 { 6 int x; 7 scanf("%d",&x); 8 if (x==-1) return; 9 sum[p]+=x; 10 bd(p-1); 11 bd(p+1); 12 } 13 bool dl() 14 { 15 int i,j,k,p,q,x,y,z; 1

UVA 399 The Falling Leaves(二叉树)

 The Falling Leaves  Each year, fall in the North Central region is accompanied by the brilliant colors of the leaves on the trees, followed quickly by the falling leaves accumulating under the trees. If the same thing happened to binary trees, how l

UVA 699(二叉树建树与遍历)

M - The Falling Leaves Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Appoint description:  System Crawler  (2014-02-08) Description  The Falling Leaves  Each year, fall in the North Central region is accompanied

【数据结构】The Falling Leaves(6-10)

[UVA699]The Falling Leaves 算法入门经典第6章例题6-10(P159) 题目大意:有一颗二叉树,求水平位置的和. 试题分析:乱搞就可以过,将树根节点的pos记为0,向左-1,向右+1,统计答案即可. #include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<stack> #in