有两个问题

P1047 [NOIP2005 普及组] 校门外的树

@[老冲怪](/user/44812) 你直接定一个最大值不就行了
by 已注销HeBhs37KwrDer @ 2020-02-01 18:57:39


@[Hopjac—Programmer](/user/168334) 直接按照题目说过的最大值设置吗?那为什么我会多一个呢?
by 老冲怪 @ 2020-02-01 18:59:25


注意题目…… 减一就是了
by pidan @ 2020-02-01 19:02:35


1. 数组大小只能用常量设定。因此使用MAXN. 2. 长度是0~L 因此总长有$L+1$,你没有统计到标号为$L$的位置。 @[老冲怪](/user/44812)
by USER113968 @ 2020-02-01 19:06:15


@[CCC_XHR](/user/113968) 第一条我没看懂,找到最大值不还是变量吗? 第二个我在定义数组的时候就定义了L-1所以只有L个
by 老冲怪 @ 2020-02-01 19:13:05


@[老冲怪](/user/44812) 你在对区间的树进行移除时,写的是`k<b`,漏掉了下标为$b$的点。 改完的AC代码是这样的: ```c++ #include <stdio.h> int number[10001];//全局变量初始为0 int main(){ int l;//马路的长度 int m;//有多少组 scanf("%d %d",&l,&m); int i,p=0; int a,b; for(i=0;i<m;i++){ scanf("%d %d",&a,&b); int k=a; for(;k<=b;k++){//你漏掉了下标为b的点,这才是正确的。 number[k]=1; } } for(i=0;i<=l;i++){//你漏掉了下表为l的点,这才是正确的 if(number[i]==0){ p++; } }printf("%d",p); } ```
by USER113968 @ 2020-02-01 19:13:27


@[老冲怪](/user/44812) 直接将数组声明为最长长度+1,考虑最大情况,这里用的是数字,确定的数字就是常量。
by USER113968 @ 2020-02-01 19:14:35


@[CCC_XHR](/user/113968) 最后一个如果是 ``` i<=l ``` 我是从0开始的,所以不就会有L+1个
by 老冲怪 @ 2020-02-01 19:16:18


@[老冲怪](/user/44812) 看题目···题目说的是 > 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在LL的位置;数轴上的每个整数点,即0,1,2,…,L,都种有一棵树。 下标包括了0 也有 L ,数组从0开始,当引用下标为$L$的数组元素时,你就出问题了。
by USER113968 @ 2020-02-01 19:16:52


@[老冲怪](/user/44812) L是从1开始数的,还有一个0呢。
by USER113968 @ 2020-02-01 19:17:37


| 下一页