哪错了求助

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

wanxsr123 @ 2024-11-26 22:35:02

#include<stdio.h>
int main()
{
        int l,m;
    int x,y;
    scanf("%d %d",&l,&m);
    int a[10000]={};
    for(int i=0;i<m;i++)
    {
        scanf("%d %d",&x,&y);
        while(x<=y)
        {
            a[x]=1;
            x++;
        }
    }
    int total=0;
    for(int i=0;i<=l;i++)
    {
        total+=a[i];
    }
    printf("%d",l+1-total);
    return 0;
}

by GuaiRen @ 2024-11-26 22:50:21

第0棵树到第l棵树一共是l+1棵树而不是l棵树,注意是在端点上种树,所以创建数组时长度应该至少为l + 1

你在后面遍历时确实考虑到了末尾的情况,但是前面数组没有创够导致越界

修改后代码就不放了,比较简单

一些小建议:代码格式化之后更适合给别人看


by fifast @ 2024-11-27 22:18:54

@wanxsr123 求关!

#include <bits/stdc++.h>
using namespace std;
int main(){
    int l,m;
    cin>>l>>m;
    int a[l+1];
    for(int i=0;i<=l;i++)a[i]=1;
    int x,y;
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        for(int j=x;j<=y;j++)a[j]=0;
    }
    int s=0;
    for(int i=0;i<=l;i++){
        if(a[i]==1)s++;
    }
    cout<<s;
    return 0;
}

|