问题描述
强大的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个看守的结束位置)位置大,就把人数加一