题目描述:假设要用很多个教室对一组活动进行调度。我们希望使用尽可能少的教室来调度所有的活动。
第一行为活动的个数 N(1<=N<=1 000 000) 。 接下来 N 行为 Si 和 Fi (0<=Si<Fi<=2 000 000 000) ,分别代表第 i 个活动的开始时间和结束时间。活动 i 的区间段为 [Si,Fi)。 输入时间和输出时间用空格分隔。
输出有一行 M ,为所需教室的最小数量。
例如:
输入:
11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
输出:
5
思路描述:用贪心算法,对活动结束时间进行排序,然后安排教室
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int x,y;
};
node a[1000000];
int b[1000000];
bool cmp(node a,node b)
{
return a.y<b.y;
}
int main()
{
int n,sum=0,num=0,i,m;
//sum-教室数 num-已用活动数
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a,a+n,cmp);
while (num<n)
{
m=0;
for (i=0;i<n;i++)
if (b[i]!=1&&a[i].x>=m)
{
b[i]=1;
m=a[i].y;
num++;
}
sum++;
}
printf("%d\n",sum);
}