希望更丰富的展现?使用[Markdown](https://www.luogu.org/wiki/show?name=%E5%B8%AE%E5%8A%A9%EF%BC%9Amarkdown)
by 氷芽川四糸乃 @ 2019-06-23 18:15:33
@[Long_Ping](/space/show?uid=53204) 嗯嗯,我改改试试
by 毛博辉 @ 2019-06-23 18:16:40
#include<cstdio>
#include<algorithm>
using namespace std;
class area
{
public:
int start;
int end;
}A[500];
bool cmp(area a,area b)
{
if(a.start!=b.start) {return a.start<b.start;}
else {return a.end<b.end;}
}
int result(area a[],int L,int n);
int result(area a[],int L,int n)
{
int sum=0,i=0;
int start,end;
start=a[0].start;
end=a[0].end;
for(i=0;i<n;i++)
{
if(i+1<n&&a[i].end>=a[i+1].start)
{
if(a[i+1].end>end) {end=a[i+1].end;}
}
else
{
sum+=(1+end-start);
if(i+1<n) {start=a[i+1].start;end=a[i+1].end;}
}
}
return L-sum;
}
int main()
{
int L,N;
int n;
while(scanf("%d%d",&L,&N)!=EOF)
{
n=N;
while(n--)
{
scanf("%d%d",&A[n].start,&A[n].end);
}
sort(A,A+N,cmp);
printf("%d\n",result(A,L+1,N));
}
return 0;
}
by 毛博辉 @ 2019-06-23 18:20:33
求大佬帮我看一下吧
我感觉思路是对的就是原来的数据排序后
Start End
100 200
150 300
470 471
然后看数据的前一个数据的End是否大于等于后一个的Start,可以的话就可以记录,然后不符合时计算,并更改start与end的值
by 毛博辉 @ 2019-06-23 18:25:26
@[毛博辉](/space/show?uid=195075) dalao的代码蒟蒻认不识……
by 灵光一闪 @ 2019-06-23 18:27:40
@[毛博辉](/space/show?uid=195075) 直接开一个bool数组,然后把所有的被砍掉的数的序号在bool里记成true
然后循环找false……
by 灵光一闪 @ 2019-06-23 18:29:19
@洛谷亿岁,额,大佬,帮我看下下,可能代码实现的比较麻烦,谢谢大佬
by 毛博辉 @ 2019-06-23 18:34:20
@[洛谷亿岁](/space/show?uid=122605) 嗯嗯,我试试
by 毛博辉 @ 2019-06-23 18:35:30
@[毛博辉](/space/show?uid=195075)
AC代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
int a[10001];
int main()
{
long long n,sum=0,m,l,x,y;
cin>>l>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
for(int j=x;j<=y;j++)
{
a[j]=1;
}
}
for(int i=0;i<=l;i++)
{
if(a[i]==0) sum++;
}
cout<<sum;
return 0;
}
```
by 幻之陨梦 @ 2019-06-23 22:17:28
@[ZhanLang](/space/show?uid=123808) 嗯嗯,谢谢您,嘻嘻
by 毛博辉 @ 2019-06-23 23:13:33