当前位置: 代码迷 >> 综合 >> poj 1089 Intervals 简单贪心
  详细解决方案

poj 1089 Intervals 简单贪心

热度:1   发布时间:2024-01-13 21:27:15.0

好久没用sort函数了,有点生疏了,。。。还是得多练习啊。。。

 

1.题意:给定很多间隔,合并间隔,使得合并后间隔最小。

5//5间隔

5 6

1 4

10 10

6 9

8 10

2.思路:先用sort函数按照间隔前段由小到大排序,然后判断是否可以合并,

3.代码:

#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define max 0x7fffffff;
struct node
{int start;int end;
} a[50000];
int cmp(struct node a,struct node b)
{return a.start<b.start;
}
int main()
{int n,ta,tb;scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d%d",&a[i].start,&a[i].end);}sort(a,a+n,cmp);ta=a[0].start;tb=a[0].end;a[n].start=max;a[n].end=max;for(int i=1; i<=n; i++){if(tb<a[i].start){printf("%d %d\n",ta,tb);ta=a[i].start;tb=a[i].end;}/*else if(tb>=a[i].end){tb=a[i].end;}*/else if(tb>=a[i].start&&tb<=a[i].end){tb=a[i].end;}}return 0;
}