请问错在哪

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

zzlovequq @ 2023-12-01 16:12:49

#include<iostream>
using namespace std;
int main()
{
    int l[10001]={0},n,m,a,b;//n为树的树木 m为区域数目
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        l[i]=1;
    }
    for(int i=0;i<m;i++)
    {
        cin>>a>>b;
        for(int j=a-1;j<=b-1;j++)
        {
            l[j]=0;
        }
    }
    int o=0;
    for(int i=0;i<n;i++)
    {
        if(l[i]==1)o++;
    }
    cout<<o<<endl;
    return 0;
}

by 2021zjhs005 @ 2023-12-01 16:33:07

@zzlovequq

为什么 j 要从 a-1b-1 ,不应该是从 ab 吗?


by _ayaka_ @ 2023-12-01 16:34:16

最后一颗树是在 l 而不是在 l−1 ,所以像这样:

#include<iostream>
using namespace std;
int main()
{
    int l[10001]={0},n,m,a,b;//n为树的树木 m为区域数目
    cin>>n>>m;
    for(int i=0;i<=n;i++)
    {
        l[i]=1;
    }
    for(int i=0;i<m;i++)
    {
        cin>>a>>b;
        for(int j=a;j<=b;j++)//此处因为本来区间就是从0开始,所以要改
        {
            l[j]=0;
        }
    }
    int o=0;
    for(int i=0;i<=n;i++)
    {
        if(l[i]==1)o++;
    }
    cout<<o<<endl;
    return 0;
}

AC了!


by _ayaka_ @ 2023-12-01 16:34:37

@zzlovequq


by zzlovequq @ 2023-12-01 19:32:14

@2021zjhs005 我是这么想的 第6颗树 对应的是l【5】


by zzlovequq @ 2023-12-01 19:33:22

@ayaka 谢谢你!


by 2021zjhs005 @ 2023-12-01 19:35:00

@zzlovequq

这里 l0 开始,但是 ab 描述的不是第几棵树,而是第几个位置的树。


by zzlovequq @ 2023-12-01 19:37:19

@2021zjhs005 原来如此 是我审题没有注意了 谢谢你!


|