题目:
某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;数轴上的每个整数点,即 0,1,2,\dots,l0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
我的代码:
#include<stdio.h>
int main()
{
//一个数列用来记录左边,一个数列用来记录右边,一个数表示这个区间有没有弄过,一个数列用来表示最终的数列
int n,m,i,j,min,max,t;
scanf("%d %d",&n,&m);
int a[n];
int b[m][2];
int c[m][2];
for(i=0;i<n+1;i++) //给n初始化
a[i]=i;
for(i=0;i<m;i++)
scanf("%d %d",&b[i][0],&b[i][1]); //放区间
for(i=0,t=0;i<m;i++) // 合并区间
{
if(b[i][0]!=-1)
{
min=b[i][0];
max=b[i][1];
for(j=i+1;j<m;j++)
{
if(max>=b[j][0]&&min<b[j][1]) //表示能构成一个区间
{
if(b[j][0]<min) min=b[j][0];
if(b[j][1]>max) max=b[j][1];
b[j][0]=-1;
}
}
c[t][0]=min;
c[t][1]=max;
t++;
}
else if(b[i][0]==-1)continue;
}
int sum;
for(i=0,sum=0;i<t;i++)
sum=sum+(c[i][1]-c[i][0]+1);
printf("%d",n+1-sum);
return 0;
}
我想把小区间合并成大区间,但是错误了