之前就写好了,but……数组开小了……!!!

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

using namespace std;
const int INF = 0xffffff;
const double Pi = 4 * atan(1);

struct Node{
    int val;
    Node * right;
    Node * left;
};
int cnt;
int a[10000];
int arr[50000];
int n,ll,rr;
void b_build(Node * &tmp){
    if(n >= cnt)
        return;
    if(a[n] == -1)
        return;
    tmp = new Node;
    tmp->left = NULL;
    tmp->right = NULL;
    tmp->val = a[n];
    if(n+1 < cnt){
        ++n;
        b_build(tmp->left);
    }
    if(n+1 < cnt){
        ++n;
        b_build(tmp->right);
    }
}

void dfs(Node * node,int num){
    if(node == NULL)
        return;
    ll = min(ll,num);
    rr = max(rr,num);
    arr[num] += node->val;
    dfs(node->left,num-1);
    dfs(node->right,num+1);
    return;
}

int main()
{
   // freopen("inpt.txt","r",stdin);
    int cas = 0;
    while(1){
        int cntN = 0;
        int cntT = 0;
        int tmp;
        cnt = 0;
        cin >> tmp;
        if(tmp == -1)
            break;
        a[cnt++] = tmp;
        cntT++;
        while(cin >> tmp){
            if(tmp == -1){
                cntN++;
            }
            else{
                cntT++;
            }
            a[cnt++] = tmp;
            if(cntN == cntT + 1)
                break;
        }
        Node * root = NULL;
        n = 0;
        b_build(root);
        memset(arr,0,sizeof(arr));
        ll = 25000;
        rr = 25000;
        dfs(root,25000);
        cout << "Case " << ++cas << ":" << endl;
        for(int i = ll;i < rr;i++)
            cout << arr[i] << ‘ ‘;
        cout << arr[rr] << endl;
        cout << endl;
    }
    return 0;
}

uva699   前序遍历建树然后dfs深搜用数组标记偏移……2333333

很简单的水题,数组开小了,一直wa……!

时间: 2024-11-05 12:26:14

之前就写好了,but……数组开小了……!!!的相关文章

HDU 3572【最大流+数组开小会TLE】

题意:有M个机器,有N个任务.每个任务必须在Si 或者以后开始做,在Ei 或者之前完成,完成任务必须处理Pi 个时间单位.其中,每个任务可以在任意(空闲)机器上工作,每个机器的同一时刻只能工作一个任务,每个任务在同一时刻只能被一个机器工作,而且任务做到一半可以打断,拿去其他机器做.能否在规定时间内把任务做完. 这个题建图简直是经典..刚开始看也是一脸懵逼,还想用贪心搞一搞..但素感觉做不出来. 正确的思路是用网络流最大流. S与每个任务连边,容量为p,每个任务与相应的时间段连边,容量为1,每个时

8/2 multi4 E找规律+模拟,空间开小了然后一直WA。。。J爆搜check不严谨WA。。。multi3 G凸包判共线写错数组名???样例太好过.想哭jpg。

multi4 Problem E. Matrix from Arrays 题意:构造一个数组,求子矩阵前缀和. 思路:打表找规律,"发现"L为奇数时循环节为L,为偶数时循环节为2L,求相应循环节的二维前缀和然后加加减减计算一下就好. 虚伪地证明一下循环节:L为奇数时对于第x行/列开始的位置有(x  +  x+L-1)*L/2   ->     (2x+L-1)/2(为整数)*L,因此扫过L行/列也就扫过了L整数倍"(2x+L-1)/2"倍的A[0]~A[L],

[ACM] Color the ball [线段树水题][数组开大]

Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N).  当N

一个Java写的批量重命名文件小程序

今天学了一下java的File操作,然后乘着兴趣,写了一个可以批量处理文件命名的小程序,小程序还有一些不完美的地方,但胜在有趣.比如可以快捷更改你不想让别人看到的文件之类的...限个人使用,造成数据丢失后果自负哟. import java.io.File; import java.sql.Date; import java.util.Scanner; public class RenameTool { boolean useDefaultName = false; boolean useDefa

if else、数组的小练习。

逻辑运算符 &&:二元运算符,两边都是true结果才是true. ||:二元运算符,只要有一个是true结果就是true. !:一元运算符,取反,真的变假,假的变真. 短路运算 &与&&两个的区别.(&所有的比较值都会进行计算)使用&&某些时候会短路. ||因为只要有一个条件为真,那么就不进行后面的运算了. 三元运算符 int i = 10; int j = (i > 100 ? 50 : 80);//如果i>100那么j就是 5

腾讯面试题之求数组前小后大划分元素

时间:2014.04.29 地点:基地二楼 --------------------------------------------------------------------------------------- 一.题目 整型数组里找出符合要求的元素,满足前面的元素比该元素小,后面的元素比该元素大. 时间复杂度为:O(n) 原理:另外开辟两个数组,初始化为原数组值,一个用于存储到当前元素为止前面部分的最大值,另一个用于存储到当前元素为止,后面部分的最小值.最后用当前元素和最大值数组和最小

闲来无视写的关于炉石的测试小程序

最近半年都在忙项目,基本无时间研究技术了,而且不断发现,项目中遇到的问题大多都是业务层面的,技术很多时候不是瓶颈,所以很少研究技术了. 这个是一个测试炉石传说中25仔的轰炸效果界面,我设计的情景是对面的脸还有2血,自己也是2血,对面一个3/2精灵龙,一个0/1的鲜血小鬼:此时派上25仔随机3点伤害,测试人品如何... 核心思路:ui(winform)端,向helper类传入定义好的类,BoomRequest,其中包含了一个字典,key代表每个元素(自己的脸,对手的脸,场上的生物等),value是

写一个函数实现数组中的元素随机乱序排序

//原生JS写一个函数实现一个shuffle方法,将数组中的元素随机乱序排序 var shuffle = function(arr){ var len,t,rand; for(var i =0;len = arr.length,i<len;i++){ rand = parseInt(Math.random()*len);//parseInt(Math.random()*(len-1-0)+1);或者rand = Math.floor(Math.random()*(len-1-0)+1);即Mat

写一个方法求数组中的最大值,最小值,总和以及平均值。

class Program { /// <summary> /// 求数组中的最大值,最小值,总和以及平均值. /// </summary> /// <param name="nums">输入一个数组</param> /// <returns>返回一个新的数组(max,min,sum,avg)</returns> public static int[] GetMaxMinSumAvg(int[] nums) { i