题目:已知数轴上0<N<10000条线段。每条线段按照端点Ai和Bi(Ai<>Bi,i=1..N)定义。端点坐标在(-999,999)内,坐标为整数。有些线段可能相交。编程实现删除最少数目的线段,使得余下的任意两条线段不相交。
codevs和洛谷数据范围不同 改一下常量maxn即可
思路是很简单的贪心
//codevs1214 线段覆盖 贪心
//先排序,扫描一遍,每次保留右端点最小的线段,重叠的delete,画一张图即可证明
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100+10;
int l[maxn],r[maxn];
bool st[maxn];
int main(){
int n;
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%d%d",&l[i],&r[i]);
if (l[i]>r[i]){
int temp=l[i];
l[i]=r[i];
r[i]=temp;
}
}
for (int i=0;i<n;i++){
for (int j=i+1;j<n;j++){
if (r[i]>r[j]){
int temp1=r[i];
int temp2=l[i];
r[i]=r[j];l[i]=l[j];
r[j]=temp1;l[j]=temp2;
}
}
}
memset(st,true,sizeof(st));
for (int i=0;i<n;i++){
if (st[i]){
for (int j=i+1;j<n;j++){
if (st[j]&&(l[j]<r[i])){
st[j]=false;
}
}
}
}
int ans=0;
for (int i=0;i<n;i++) if (st[i]) ans++;
printf("%d",ans);
return 0;
}
——自牧归荑,洵美且异;匪女之为美,美人之贻。