蓝桥杯 算法训练 藏匿的刺客

蓝桥杯 算法训练 藏匿的刺客

题目描述

  • 资源限制
    时间限制: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;					//n个区间			
struct node{			//一个区间结点 
	int L;
	int R;
}; 
node var[1000];			//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;
	}
	
	//排序  1.右端点从小到大排,相同则左端点从小到大排  
	sort(var, var+n, cmp);
	
	//贪心 
	for(int i=0; i<n; ){
		//2.此时最小的右端点区间必然有一个人  
		ans++;
		//记录2中的右端点 
		int temp = var[i].R;
		//3.向后遍历,直至左端点>2中的右端点时,说明出现了新人,重复23步骤直至结束。
		while(var[++i].L<=temp);
	}
	
	cout<<ans<<endl;
	return 0; 
} 
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值