试题 算法训练 藏匿的刺客

问题描述

  强大的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表示范围内

#include<iostream>
#include<algorithm>
using namespace std;

struct guard{
	int start;
	int end;
};

bool cmp(guard A, guard B) {
	return A.end < B.end;
}

int main() {
	int n;
	guard people[1001];
	
	cin >> n;
	
	for (int i = 0; i < n; i ++) {
		cin >> people[i].start >> people[i].end;
	}
	
	sort(people, people + n, cmp);
	
	int ans = 1;
	int minEnd = people[0].end;
	
	for (int i = 0; i < n; i ++) {
		if (minEnd < people[i].start) {
			ans++;
			minEnd = people[i].end;
		}
	}
	
	cout << ans;
	
	return 0;
}

总结:

首先把那几组数据存下来,我用一个guard(看守)结构体来储存

把他们的结束位置从小到大排列

接下来只要找开始位置比那个最小的结束(即第1个看守的结束位置)位置大,就把人数加一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值