整数区间(贪心)

描述

请编程完成以下任务:

1.从文件中读取闭区间的个数及它们的描述;

2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。

格式

输入格式

首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。

输出格式

第一行集合元素的个数,对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少。

样例

输入样例

4
3 6
2 4
0 2
4 7

输出样例

2

限制

时间限制: 1000 ms

内存限制: 65536 KB

这题和活动选择、会议室时间选择等题目的解题思想一样的,这类题目都是针对多个区间进行操作:对右区间进行从小到大排序,然后判断两个区间是否有交集,没有交集则在集合中添加一个新元素并改变区间的边界。

#include<bits/stdc++.h> 
using namespace std;

struct interval{
	int a;
	int b;
}inter[10005];

bool compare(const interval &x, const interval &y) {
	return x.b < y.b; 
}

int main()
{
	int n, count=0, c[10005];
	scanf ("%d", &n);
	for (int i=0; i<n; i++) {
		scanf ("%d %d", &inter[i].a, &inter[i].b);
	}
	sort(inter, inter+n, compare);
	int tmp = -1;
	for (int j=0; j<n; j++) {
		if (tmp < inter[j].a) {
			count++;
			tmp = inter[j].b;
		}	
	}
	printf ("%d", count);
	
	return 0;
} 
发布了89 篇原创文章 · 获赞 77 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/wodemaoheise/article/details/105085230