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了。