UVa 699 落叶
意甲冠军:我几乎不记得的题意!。!
它是一个长坑。。我们从根节点开始,留下每一步,保存横坐标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 落叶的更多相关文章
- UVa 699 The Falling Leaves(递归建树)
UVa 699 The Falling Leaves(递归建树) 假设一棵二叉树也会落叶 而且叶子只会垂直下落 每个节点保存的值为那个节点上的叶子数 求所有叶子全部下落后 地面从左到右每 ...
- UVA.699 The Falling Leaves (二叉树 思维题)
UVA.699 The Falling Leaves (二叉树 思维题) 题意分析 理解题意花了好半天,其实就是求建完树后再一条竖线上的所有节点的权值之和,如果按照普通的建树然后在计算的方法,是不方便 ...
- UVa 699 下落的树叶
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 699 the falling leaves——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3QAAAMsCAIAAACTL3d2AAAgAElEQVR4nOx9y7GuPA4tKRADk/92T8 ...
- UVa 699 (二叉树) The Falling Leaves
题意: 按先序方式输入一棵二叉树,节点是带权的,左孩子在父节点的左一个单位,右孩子在父节点的右一个单位,从左到右输出相同水平位置节点之和. 分析: 做了好几道二叉树的题,代码应该也很好理解了.这里ma ...
- UVa 699 The Falling Leaves
题意:给出按先序输入的一颗二叉树,分别求出从左到右的相同横坐标上的节点的权值之和 递归建树,然后用sum数组分别统计每一个横坐标上的权值之和 感觉建树都在递归递归递归= =慢慢理解吧 #include ...
- uva 699 The Falling Leaves dfs实现
额,刘汝佳小白里面的配套题目. 题目求二叉树同垂直线上结点值的和. 可以用二叉树做,挺水的其实. 尝试使用dfs实现了:开一个大点的数组,根节点为最中间那点,然后读取时就可以进行和的计算了. 代码: ...
- uva 699
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #i ...
- 二叉树的递归遍历 The Falling Leaves UVa 699
题意:对于每一棵树,每一个结点都有它的水平位置,左子结点在根节点的水平位置-1,右子节点在根节点的位置+1,从左至右输出每个水平位置的节点之和 解题思路:由于上题所示的遍历方式如同二叉树的前序遍历,与 ...
随机推荐
- Linux 安装之U盘引导
说到装系统最简单的方法无非就是找个系统安装光盘来然后就一步一步慢慢的安装.简单是简单但好似大多数人好像都木有Linux的安装光盘. 因此仅仅能用U盘来模拟光盘的功能来装系统咯. 电脑上装有Window ...
- 【Linux驱动】TQ2440 LED驱动程序
★整体介绍 LED驱动程序主要实现了TQ2440开发板上的4个LED灯的硬件驱动,实现了对引脚GPIOB5.GPIOB6.GPIOB7.GPIOB8的高低电平设置(common-smdk.c中已经实现 ...
- 辛格尔顿和Android
辛格尔顿(Singleton) .singleton.h,定义类的基本成员及接口 #ifndef SINGLETON_H_INCLUDE #define SINGLETON_H_INCLUDE cla ...
- Android:What is ART?
背景:Android4.2之前,安卓手机系统的应用程序均在Dalvik Java的虚拟机上执行,这样的执行模式还要依靠一个编译器来实现与应用程序的沟通.应用程序每次执行时,都须要将程序内的代码转变为机 ...
- 手机APP有三类:原生APP,WebAPP,HybridApp
搭建 AngularJS+Ionic+Cordova 开发环境并运行一个demo 目前的手机APP有三类:原生APP,WebAPP,HybridApp:HybridApp结合了前两类APP各自的优点, ...
- c# ThreadPoold使用心得
于c#多线程编程经常使用的线程,但是,因为线程的创建和销毁是非常资源 - 成本非常大.因此,我们使用线程池来解决问题, 在线程池的开始是申请一定数量的线程系统.和维护,有任务时间,假设你有空闲的线程, ...
- WPF 3D:简单的Point3D和Vector3D动画创造一个旋转的正方体
原文:WPF 3D:简单的Point3D和Vector3D动画创造一个旋转的正方体 运行结果: 事实上很简单,定义好一个正方体,处理好纹理.关于MeshGeometry3D的正确定义和纹理这里就不多讲 ...
- 使用crontab创建 linux 系统定时任务#
任务1: 每隔1分钟,运行一次 /home/sn/yeelink.sh文件 ,用于上传数据到www.yeelink.net 1. 先在当时目录里面创建一个cronfile文件 vim cronfile ...
- 用Jstack跟踪Cpu占用率的Java线程(转)
以下方法在centOS下执行通过:1.先定位占用cpu高的进程 top 2.使用以下命令 ps p 14766 -L -o pcpu,pid,tid,time,tname,stat,psr | sor ...
- Android Widget 小部件(一) 简单实现
在屏幕上加入Widget:或长按屏幕空白处,或找到WidgetPreview App选择. 原生系统4.0下面使用长按方式,4.0及以上 打开WIDGETS 创建Widget的一般步骤: 在menif ...