1428 活动安排问题(51nod)

1428 活动安排问题

  1. 1 秒
  2.  
  3. 131,072 KB
  4.  
  5. 10 分
  6.  
  7. 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

猜你喜欢

转载自blog.csdn.net/qq_42434171/article/details/84262327