意甲冠军:我几乎不记得的题意!。!

它是一个长坑。。我们从根节点开始,留下每一步,保存横坐标1,正确的一步加上横坐标1。

那么同样的横坐标统计data值总和。

思维:我来想,这可以递归成就。上就能够算了。用一个数组来存各横坐标的data值,然后每来一个该横坐标的结点就直接加上就能够了。完了再遍历输出。

非常easy的,思路也非常清晰。本来以为能够一次过的,结果4次TLE+6次WA。

。简直破纪录了!

。開始TLE的原因是while死循环。由于我传的flag变量没用指针。一直不能break出循环。(本来还以为算法有问题呢,但认为这个递归应该能够吧。。为此还把MAXN由10000改成600改成90。

。才发现题目最后说一行最多80。。。)之后WA有多种原因,例子之间有空行,每一个例子中每一个数据间有空格可是最后一个数据没有空格,忘了凝视freopen,简直WA的原因大全了!

!最基本的还有最后一个找了好久才找到的原因是。開始我都是以scanf后跟的getchar来推断的。即dfs中凝视掉的那个if语句,即如果输入是-1且其后是EOF则输入结束。这里如果了-1后直接就结束。没有空格没有换行。。从拷贝例子数据时来看,-1后面的确像是那样,但题目总没有提到。。。

注意:结束行-1后可能有空格或换行,不是紧跟EOF

看了美网贝贝两盘胜A拉。好样的。希望再接再厉。娜姐不在的情况扛起大旗啊,近几年的代表作了吧

Code:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 90 typedef struct node
{
int data;
int wz;
struct node *left,*right;
}Node; void print();
Node* dfs(int hz,bool *flag);
Node* newnode();
void remove_tree(Node *root); int spwz[MAXN];
int first; int main()
{
//freopen("699.in","r",stdin);
//freopen("699.out","w",stdout);
int cnt=1;
while(1)
{
memset(spwz,0,sizeof(spwz));
bool flag=0;
first=1;
Node *root=dfs(0,&flag);
if(flag) break;
printf("Case %d:\n",cnt++);
print();
remove_tree(root);
}
return 0;
} void print()
{
int i=0;
for(;i<MAXN;++i)
{
if(spwz[i]) { printf("%d",spwz[i]); break;}
}
for(i++;i<MAXN;++i)
if(spwz[i]) printf(" %d",spwz[i]);
printf("\n\n");
} Node* dfs(int hz,bool *flag)
{
int num;
scanf("%d",&num);//char c=getchar();
Node *u=newnode();
u->data=num;
u->wz=hz;
//if(x!=1 || (num==-1 && c==EOF)) {*flag=1; return NULL;}
if(first && num==-1) {*flag=1; return NULL;}
first=0;
if(num<0) return NULL;
if(num>0)
{
spwz[MAXN/2+hz]+=num;
u->left=dfs(hz-1,flag);
u->right=dfs(hz+1,flag);
return u;
}
} Node* newnode()
{
Node *u=(Node*)malloc(sizeof(Node));
if(u!=NULL)
{
u->data=u->wz=0;
u->left=u->right=NULL;
}
return u;
} void remove_tree(Node *root)
{
if(root!=NULL)
{
remove_tree(root->left);
remove_tree(root->right);
free(root);
}
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

UVa 699 落叶的更多相关文章

  1. UVa 699 The Falling Leaves(递归建树)

    UVa 699 The Falling Leaves(递归建树) 假设一棵二叉树也会落叶  而且叶子只会垂直下落   每个节点保存的值为那个节点上的叶子数   求所有叶子全部下落后   地面从左到右每 ...

  2. UVA.699 The Falling Leaves (二叉树 思维题)

    UVA.699 The Falling Leaves (二叉树 思维题) 题意分析 理解题意花了好半天,其实就是求建完树后再一条竖线上的所有节点的权值之和,如果按照普通的建树然后在计算的方法,是不方便 ...

  3. UVa 699 下落的树叶

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. uva 699 the falling leaves——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3QAAAMsCAIAAACTL3d2AAAgAElEQVR4nOx9y7GuPA4tKRADk/92T8 ...

  5. UVa 699 (二叉树) The Falling Leaves

    题意: 按先序方式输入一棵二叉树,节点是带权的,左孩子在父节点的左一个单位,右孩子在父节点的右一个单位,从左到右输出相同水平位置节点之和. 分析: 做了好几道二叉树的题,代码应该也很好理解了.这里ma ...

  6. UVa 699 The Falling Leaves

    题意:给出按先序输入的一颗二叉树,分别求出从左到右的相同横坐标上的节点的权值之和 递归建树,然后用sum数组分别统计每一个横坐标上的权值之和 感觉建树都在递归递归递归= =慢慢理解吧 #include ...

  7. uva 699 The Falling Leaves dfs实现

    额,刘汝佳小白里面的配套题目. 题目求二叉树同垂直线上结点值的和. 可以用二叉树做,挺水的其实. 尝试使用dfs实现了:开一个大点的数组,根节点为最中间那点,然后读取时就可以进行和的计算了. 代码: ...

  8. uva 699

    #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #i ...

  9. 二叉树的递归遍历 The Falling Leaves UVa 699

    题意:对于每一棵树,每一个结点都有它的水平位置,左子结点在根节点的水平位置-1,右子节点在根节点的位置+1,从左至右输出每个水平位置的节点之和 解题思路:由于上题所示的遍历方式如同二叉树的前序遍历,与 ...

随机推荐

  1. meta标签详解:源http://blog.csdn.net/kongjiea/article/details/17092413

    一.大众机型常用meta标签name的设置 1.name之viewport <meta name="viewport" content=""> 说明 ...

  2. activity点击时各种方法的区别

    用到不同方法时候某些系统有不太一样的情况: public class MainActivity extends Activity { private static String TAG = " ...

  3. 用CasperJs自己主动浏览页面

    CasperJs是一个基于PhantomJs的工具,其比起PhantomJs能够更加方便的进行navigation. 一个最简单的CasperJs代码 创建一个文件baidu.js.用来模拟我们訪问百 ...

  4. Oracle Hints详细解释

    特别介绍给大家Oracle Hints之前,让我们知道下Oracle Hints什么,然后好Oracle Hints,我们希望实际.基于成本的优化器是很聪明,在大多数情况下,将选择正确的优化,减少DB ...

  5. hdu 1251 统计拼图

    二手tire木: Basic应用程序 谈到很具体的 点击打开链接 #include<cstdio> #include<cstring> #include<iostream ...

  6. Case learning

    bad case: <?php foreach($user_detail AS $val) { if(!empty($val->portrait)) { //假设这个循环从来没有到达过 $ ...

  7. String类疑虑

    Java String类疑虑: 创 拼接 String是java的经常使用类之中的一个,本质是字符数组char[].String类是final类,不可被继承. 关于String的创建,能够通过new来 ...

  8. Java线程学习笔记(两) 线程异常处理

    线程捕获异常: 情况下,我们在main()方法里是捕捉不到线程的异常的,比例如以下面代码: public class ExceptionThread implements Runnable{ @Ove ...

  9. OOP思想

    OOP思想 读者朋友们大家好,我们今天这一讲就接着前面的封装继续讲解,今天就是在前面内容上面的升级,OOP思想中的继承,我们就先来解释一下继承到底是什么意思,我们在什么地方会用到继续. 继承就是,后代 ...

  10. [webapi] 如何在查看api时 显示api的说明

    首先在Controller的方法中 写上相关注释,如下图 然后 右击webapi项目点属性.按照下图选择 红色框中内容要保持一致 然后保存. 在项目中找到到这个文件Areas/HelpPage/App ...