题目链接:活动安排问题
基准时间限制:1 秒 空间限制:131072 KB 分值: 10
难度:2级算法题
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3 1 2 3 4 2 9
Output示例
2
思路:按开始时间排序
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct node {
int s;
int t;
friend bool operator < (node a, node b)
{
return a.s < b.s;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
node data[10001];
cin >> n;
for (int i = 0; i < n; i++)
cin >> data[i].s >> data[i].t;
sort(data, data + n);
int cnt = 1;
int a[10001] = { 0 };
for (int i = 0; i < n; i++)
{
bool flag = false;
for (int j = 0; j < cnt; j++)
{
if (data[i].s >= a[j])
{
a[j] = data[i].t;
flag = true;
break;
}
}
if (flag)
continue;
a[cnt] = data[i].t;
cnt++;
}
cout << cnt << endl;
return 0;
}