LOJ #10000. 「一本通 1.1 例 1」活动安排

#10000. 「一本通 1.1 例 1」活动安排

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: 1bentong

题目描述

设有 nnn 个活动的集合 E={1,2,..,n}E=\{1,2,..,n\}E={1,2,..,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动 iii 都有一个要求使用该资源的起始时间 sis_isi​​ 和一个结束时间 fif_ifi​​,且 si<fis_i<f_isi​​<fi​​。如果选择了活动 iii ,则它在时间区间 [si,fi)[s_i,f_i)[si​​,fi​​) 内占用资源。若区间 [si,fi)[si,fi)[si,fi) 与区间 [sj,fj)[s_j,f_j)[sj​​,fj​​) 不相交,则称活动 iii 与活动 jjj 是相容的。也就是说,当 fi≤sjfi \leq sjfisj 或 fj≤sif_j \leq s_ifj​​si​​ 时,活动 iii 与活动 jjj 相容。选择出由互相兼容的活动组成的最大集合。

输入格式

第一行一个整数 nnn;

接下来的 nnn 行,每行两个整数 sis_isi​​ 和 fif_ifi​​。

输出格式

输出互相兼容的最大活动个数。

样例

样例输入

4
1 3
4 6
2 5
1 7

样例输出

2

数据范围与提示

1≤n≤10001 \leq n \leq 10001n1000

 1 //2018-07-27 20:12:12
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int N = 10001;
 8 int n;
 9 struct node{
10     int st, ed;
11 }a[N];
12 
13 bool cmp(node a, node b){
14     return a.ed < b.ed;
15 }
16 
17 int main(){
18     scanf("%d", &n);
19     for(int i=1; i<=n; i++)
20         scanf("%d%d", &a[i].st, &a[i].ed);
21     sort(a+1, a+n+1, cmp);
22     int t = a[1].ed;
23     int ans = 1;
24     for(int i=2; i<=n; i++)
25         if(a[i].st >= t){
26             ans++;
27             t = a[i].ed;
28         }
29     printf("%d\n", ans);
30 
31     return 0;
32 }

猜你喜欢

转载自www.cnblogs.com/sineagle/p/9379554.html