您的位置:首页 > 其它

【贪心】闭区间问题

2016-07-19 23:03 176 查看

问题X:【贪心】闭区间问题

时间限制:1Sec内存限制:64MB
提交:15解决:9
[提交][状态][讨论版]

题目描述

通过魔法钟回来的张琪曼和魔法学院的其他学员一起研究营救李旭琳脱离“时空陷”的方法。他们建立了n个对历史时间线的监控点,每个监控点可监控历史上的一个时间段,我们可以简单地看做是x轴上n个闭区间。但有些监控点监控的时间段是重叠的,这会干扰监控的准确性。请尝试去掉尽可能少的闭区间,使剩下的闭区间都不相交。

输入

第一行为闭区间的个数n(1≤n≤40000),随后n行为闭区间的2个端点。

输出

输出去掉尽可能少的闭区间的个数。

样例输入

3
1020
1510
2015

样例输出

2
思路:由于是闭区间,比上一题增加不相交就可以。
代码:


#include<iostream>
#include<cstdio>
#include<algorithm>

usingnamespacestd;

structnode{
intbegin;
intend;
};
nodett[105];

intcmp(nodea,nodeb){
returna.end<b.end||a.end==b.end&&a.begin<b.begin;
}

intmain()
{
intn;
intt;
ints=0;
intk;//记录上一个计入的节目。
//while(scanf("%d",&n)!=EOF&&n){
scanf("%d",&n);
for(inti=0;i<n;i++){
scanf("%d%d",&tt[i].begin,&tt[i].end);
if(tt[i].begin>tt[i].end){
t=tt[i].begin;
tt[i].begin=tt[i].end;
tt[i].end=t;
}
}
sort(tt,tt+n,cmp);
s+=1;
k=0;
for(inti=1;i<n;i++){
if(tt[i].begin>tt[k].end){
s++;
k=i;
}
}
printf("%d\n",n-s);
s=0;
//}

return0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: