第一个测试点错了,怎么错的?

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

_hacket @ 2024-05-16 15:15:54

#include<stdio.h>

int main(){
    int n,m,count=0;
    scanf("%d %d",&n,&m);

    int l[n+1]={0};
    for(int i=0;i<m;i++){
        int a,b;
        scanf("%d %d",&a,&b);
        for(int j=a-1;j<=b-1;j++)
            l[j]=1;
    }

    for(int i=0;i<n+1;i++)
        if(l[i]==0)
            count++;

    printf("%d\n",count);
}

第一个测试点错了,怎么错的?


by ___Furina___ @ 2024-05-16 15:45:13

@_hacket

#include<stdio.h>

int main(){
    int n,m,count=0;
    scanf("%d %d",&n,&m);

    int l[n+2]={0};
    for(int i=0;i<m;i++){
        int a,b;
        scanf("%d %d",&a,&b);
        for(int j=a;j<=b;j++)
            l[j]=1;
    }

    for(int i=0;i<=n;i++)
        if(l[i]==0)
            count++;

    printf("%d\n",count);
}

提一嘴,不建议使用 int l[n+1]={0};建议开静态数组,例如 int l[10010]={0};


by ___Furina___ @ 2024-05-16 15:46:16

@_hacket 你的代码错在如果种树的左端点是从 0 开始呢?


|