1428 活动安排问题
- 1 秒
- 131,072 KB
- 10 分
- 2 级题
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
收起
输入
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
输出
一行包含一个整数表示最少教室的个数。
输入样例
3 1 2 3 4
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node{
int str,end;
}qwe[10010];
bool vis[10010];
int w=0;
bool cmp(node a,node b)
{
if(a.str<b.str) return true;
else if(a.str==b.str&&a.end<b.end) return true;
else return false;
}
void qury(int n)
{
int i=0,j;
while(vis[i]) i++;
if(i<n)
{
vis[i]=true;
w++;}
else return;
int k=qwe[i].end;
for(j=i;j<n;j++)
{
if(qwe[j].str>=k&&!vis[j])
{
vis[j]=true;
k=qwe[j].end;
w++;
}
}
}
int main()
{
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%d%d",&qwe[i].str,&qwe[i].end);
}
sort(qwe,qwe+n,cmp);
memset(vis,false,sizeof(vis));
int num=0;
while(w!=n)
{
qury(n);
num++;
}
printf("%d\n",num);
return 0;
}
2 9
输出样例
2