蓝桥杯 算法训练 藏匿的刺客
题目描述
- 资源限制
时间限制:1.0s 内存限制:256.0MB
- 问题描述
强大的kAc建立了强大的帝国,但人民深受其学霸及23文化的压迫,于是勇敢的鹏决心反抗。
kAc帝国防守森严,鹏带领着小伙伴们躲在城外的草堆叶子中,称为叶子鹏。
kAc帝国的派出的n个看守员都发现了这一问题,第i个人会告诉你在第li个草堆到第ri个草堆里面有人,要求你计算所有草堆中最少的人数,以商议应对。
“你为什么这么厉害”,得到过kAc衷心赞美的你必将全力以赴。
- 输入格式
第一行一个数字n,接下来2到n+1行,每行两个数li和ri,如题。
- 输出格式
输出一个数,表示最少人数。
- 样例输入
5
2 4
1 3
5 7
1 8
8 8
- 样例输出
3
- 数据规模和约定
30%的数据n<=10
70%的数据n<=100
100%的数据n<=1000
所有数字均在int表示范围内
方案1 贪心
思路:
- 1.右端点从小到大排,相同则左端点从小到大排
- 2.此时最小的右端点区间必然有一个人
- 3.向后遍历,直至左端点>2中的右端点时,说明出现了新人,重复23步骤直至结束。
#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct node{
int L;
int R;
};
node var[1000];
int ans;
bool cmp(node a, node b){
if(a.R < b.R || (a.R==b.R && a.L<b.L)){
return 1;
}else{
return 0;
}
}
int main(){
cin>>n;
for(int i=0; i<n; ++i){
cin>>var[i].L>>var[i].R;
}
sort(var, var+n, cmp);
for(int i=0; i<n; ){
ans++;
int temp = var[i].R;
while(var[++i].L<=temp);
}
cout<<ans<<endl;
return 0;
}