题目:已知数轴上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; }
——自牧归荑,洵美且异;匪女之为美,美人之贻。
时间: 2024-11-08 18:26:38