当前位置: 代码迷 >> 综合 >> zcmu--1615: 找区间(贪心)
  详细解决方案

zcmu--1615: 找区间(贪心)

热度:26   发布时间:2023-12-26 10:00:14.0

1615: 找区间

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 291  Solved: 122
[Submit][Status][Web Board]

Description

在X轴上有n个闭区间,去掉尽可能少的区间使剩下的区间都不相交

Input

多组测试数据

第一行输入n(n<=1000)

接下来n行每行两个数a,b代表闭区间的两个端点。

(a,b<=1000000)

Output

输出最小的删除的区间数

Sample Input

3

10 20

15 10

20 15

Sample Output

2

【分析】贪心算法--选择不相交区间问题

【思路】首先按照区间的结束位置升序排序,一次考虑各个区间。如果没有和已经选择的区间冲突就选。

【代码】

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1e3+5;
struct node{int l,r;
}a[maxn];
bool cmp(node x,node y)
{return x.r<y.r;
}
int main()
{int n;while(~scanf("%d",&n)){for(int i=0;i<n;i++){int x,y;scanf("%d%d",&x,&y);if(x>y)swap(x,y);a[i].l=x,a[i].r=y;}	sort(a,a+n,cmp);//	for(int i=0;i<n;i++)cout<<a[i].l<<","<<a[i].r<<endl;int cnt=1,t=a[0].r;for(int i=1;i<n;i++){if(a[i].l>t){cnt++;t=a[i].r;}}cout<<n-cnt<<endl;}
}