
题目大意就是给几个活动,问要几个教室能够弄完。
这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include<iostream> #include<stdlib.h> #include<queue> using namespace std; struct { 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(){
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("%dn",rooms); }
|
近期评论