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;
}