1.16
给定区间个数n,然后给定n个区间,求出尽可能多的不相交的区间。
#include <stdio.h>
#include <algorithm>
using namespace std;
struct point{
int x,y;
}s[max];
bool cmp(point a,point b){//先按右端点,从小到大排序
if(a.y!=b.y) return a.y<b.y;
else return a.x>b.x;//如果右端点相同,则选择左端点大的(贪心的体现,因为这样 y-x就最小)
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&s[i].x,&s[i].y);//scanf里加不加空格都一样
}
sort(s,s+n,cmp);
int cnt=1,lasty=s[0].y;//因为排完序了,所以s[0]的右端点就是第一个检测的端点
printf("(%d,%d) ",s[0].x,s[0].y);
for(int i=1;i<n;i++){
if(s[i].x>=lasty){//如果第二个区间的左端点大于或者等于第一个区间的右端点
lasty=s[i].y;//则符合要求,更换为第二个区间的右端点
printf("(%d,%d) ",s[i].x,s[i].y);
cnt++;
}
}
printf("\nthe sum is %d \n",cnt);
return 0;
}