最多只能通过8组,求大佬救命

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

baibaidebai @ 2024-02-20 14:35:49

#include<stdio.h>
int road[10000];
int main()
{
    int l,num;
    scanf("%d %d\n",&l,&num);
    for(int i=0;i<num;i++)
    {
        int num1=0,num2=0;
        scanf("%d %d\n",&num1,&num2);
        for(int j=num1;j<num2;j++)
            road[j]=1;
    }
    int out=0;
    for(int i=0;i<l;i++)
    {
        if(road[i]==0)
            out++;
    }
    printf("%d",out);
    return 0;
}

这个代码只能通过后面8个测试,前面的两个是WA。然后我尝试修改了第12行的代码为

    for(int j=num1-1;j<num2;j++)

结果第一组答案正确,而后面的9个又错了。 求大佬解答


by yeqiwei @ 2024-02-20 14:44:06

#include <iostream>
int a[10000];
using namespace std;
int main()
{
    int i,j,k,m,n,l,sum=0,q,z;
    cin>>l>>m;
    for(i=1;i<=m;i++)
    {
        cin>>q>>z;   
        for(j=q;j<=z;j++)
            if(a[j]==0)
                a[j]++;
    }
    for(i=0;i<=l;i++)
        if(a[i]==0)
            sum++;
    cout<<sum;
}

这是我的代码,你先看着,我看看你程序哪里错了

@baibaidebai


by yeqiwei @ 2024-02-20 14:47:03

for(int j=num1;j<num2;j++)
            road[j]=1;

把这两行改成

for(int j=num1;j<=num2;j++)
            if(road[j]==0)
                road[j]++;

by yeqiwei @ 2024-02-20 14:47:39

@baibaidebai

如果还有问题私聊


by yeqiwei @ 2024-02-20 15:21:11

还要把

for(int i=0;i<l;i++)
    {
        if(road[i]==0)
            out++;
    }

改成


for(int i=0;i<=l;i++)
    {
        if(road[i]==0)
            out++;
    }

by baibaidebai @ 2024-02-21 14:10:49

@yeqiwei 谢谢大佬,修改之后已经完全通过了


|