51nod贪心算法入门-----活动安排问题2

时间:2022-01-29 11:25:02

题目大意就是给几个活动,问要几个教室能够弄完。

这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数。

 #include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<queue>
using namespace std;
struct node
{
int start;
int end;
}s[];
int cmp(const void *a,const void *b)//结构体的一级排序
{
return (*(node*)a).start>(*(node*)b).start?:-;
}
int main(){
//freopen("C://Users//Administrator//Desktop//duipai2//data.txt","r",stdin);
//freopen("C://Users//Administrator//Desktop//duipai2//out1.txt","w",stdout);
int n,i,rooms=;
priority_queue<int,vector<int>, greater<int> > myqueue;//优先队列类型
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%d%d",&s[i].start,&s[i].end);
qsort(s,n,sizeof(node),cmp);
myqueue.push(s[].end);
rooms=;
for(i=;i<n;i++){
if(s[i].start<myqueue.top()){
rooms++;
myqueue.push(s[i].end);
}
else{
myqueue.pop();
myqueue.push(s[i].end);
}
}
printf("%d\n",rooms);
}