51nod贪心算法入门-----活动安排问题2 发表于 2016-03-17 | 分类于 acm | 题目大意就是给几个活动,问要几个教室能够弄完。 这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数。 12345678910111213141516171819202122232425262728293031323334353637#include<stdio.h>#include<iostream>#include<stdlib.h>#include<queue>using namespace std;struct node{ int start; int end;}s[10001];int cmp(const void *a,const void *b)//结构体的一级排序{ return (*(node*)a).start>(*(node*)b).start?1:-1;}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=0; priority_queue<int,vector<int>, greater<int> > myqueue;//优先队列类型 scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&s[i].start,&s[i].end); qsort(s,n,sizeof(node),cmp); myqueue.push(s[0].end); rooms=1; for(i=1;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);}