1324:【例6.6】整数区间时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1614 通过数: 1020 【题目描述】请编程完成以下任务: 1.从文件中读取闭区间的个数及它们的描述; 2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。 【输入】首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。 【输出】第一行集合元素的个数,对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少。 【输入样例】4 3 6 2 4 0 2 4 7 【输出样例】2 |
主要还是贪心
吧区间按endtime排列,分别取最后一个数然后砍一部分,一个个的砍
#include<iostream> #include<algorithm> using namespace std; struct xx{ int s,e; }; xx a[10005]; int n; bool cmp(xx x1,xx x2){ return x1.e<x2.e; } int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>a[i].s>>a[i].e; } sort(a,a+n,cmp); int ss=0,i=1,ans=1; while(i<n){ if(a[ss].e>=a[i].s){ i++; continue; } if(a[ss].e<a[i].s){ ans++; ss=i; i++; } } cout<<ans<<endl; return 0; }