求教 90分样例一过不了

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

fernandlin @ 2024-02-01 10:07:37

#include<stdio.h>
int main() {
    int n=0,i=0,a,b,m=0,ans=0,abs=0;
    int arr[10000] ;
    scanf("%d %d",&ans,&n);
    for(i=0;i<ans+1;i++){
        arr[i] = 1 ;
    }
    for(m=0;m<n;m++){
        scanf("%d %d",&a,&b);
        if(a==0){
            a = 1 ;
        }
        for(i=a-1;i<b;i++){
            arr[i] = 0 ;
        }
    }
    for(i=0;i<ans+1;i++){
        abs+=arr[i] ;
    }
    printf("%d",abs);
}

by 乔乔2011 @ 2024-02-02 11:18:05

第14行有问题,for(i=a-1;i<b;i++)相当于从a-1循环到b-1,a-1处的树被砍掉了,b处的树没被砍掉。正常情况下,这是不会影响砍掉树的数量的。但当a=0时,按照这份代码,相当于砍掉了0至b-1的树,可根据题意,应砍掉0至b的树,程序运行时会少砍一棵树,答案自然就不正确了。

把if(a==0)的特判去掉,再把原来的循环 for(i=a-1;i<b;i++)改为for(i=a;i<=b;i++)或for(i=a;i<b+1;i++)就可以AC了。


|