NYOJ 891贪心

来源:互联网 发布:淘宝开店需要押金吗 编辑:程序博客网 时间:2024/05/02 03:02

找点

时间限制:2000 ms  |  内存限制:65535 KB
难度:2
描述

上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点。但是这几天LYH太忙了,你们帮帮他吗?

输入
多组测试数据。
每组数据先输入一个N,表示有N个闭区间(N≤100)。
接下来N行,每行输入两个数a,b(0≤a≤b≤100),表示区间的两个端点。
输出
输出一个整数,表示最少需要找几个点。
样例输入
41 52 41 42 331 23 45 612 2
样例输出
131
这题开始以为是并查集,分析以后就是求最少的相交区间,先按照升序排序,然后判断i区间与i+1区间是否相交,如果不相交的话就使结果ans++,否则判断i区间的右端点与i+1的右端点的大小,取较小的.
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct point{int x, y;}a[200];bool cmp(point xx, point yy){if (xx.x != yy.x)return xx.x<yy.x;elsereturn xx.y>yy.y;}int main(){int n;while (~scanf("%d", &n)){int ans = 1;a[0].x = 9999999;a[0].y = 9999999;for (int i = 1; i <= n; i++){scanf("%d%d", &a[i].x, &a[i].y);}sort(a+1, a + n+1, cmp);for (int i = 1; i <= n; i++){if (a[i-1].y<a[i].x)ans++;else{a[i].y = a[i-1].y<a[i].y ? a[i-1].y : a[i].y;}}printf("%d\n", ans);}return 0;}

0 0
原创粉丝点击