51nod贪心算法入门-----活动安排问题2
题目大意就是给几个活动,问要几个教室能够弄完。
这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数。
1 #include<stdio.h> 2 #include<iostream> 3 #include<stdlib.h> 4 #include<queue> 5 using namespace std; 6 struct node 7 { 8 int start; 9 int end; 10 }s[10001]; 11 int cmp(const void *a,const void *b)//结构体的一级排序 12 { 13 return (*(node*)a).start>(*(node*)b).start?1:-1; 14 } 15 int main(){ 16 //freopen("C://Users//Administrator//Desktop//duipai2//data.txt","r",stdin); 17 //freopen("C://Users//Administrator//Desktop//duipai2//out1.txt","w",stdout); 18 int n,i,rooms=0; 19 priority_queue<int,vector<int>, greater<int> > myqueue;//优先队列类型 20 scanf("%d",&n); 21 for(i=0;i<n;i++) 22 scanf("%d%d",&s[i].start,&s[i].end); 23 qsort(s,n,sizeof(node),cmp); 24 myqueue.push(s[0].end); 25 rooms=1; 26 for(i=1;i<n;i++){ 27 if(s[i].start<myqueue.top()){ 28 rooms++; 29 myqueue.push(s[i].end); 30 } 31 else{ 32 myqueue.pop(); 33 myqueue.push(s[i].end); 34 } 35 } 36 printf("%d\n",rooms); 37 }