第一行一個正整數n (n <= 10000)代表活動的個數。 第二行到第(n + 1)行包含n個開始時間和結束時間。 開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000
一行包含一個整數表示最少教室的個數。
3 1 2 3 4 2 9
2
思路:
安排完所有的活動,使得使用的教室數目最少,也就是每一個教室安排的活動儘可能的多!
如何使每一個教室的活動儘可能的多呢?按照結束時間遞增順序排序,使得結束時間最早,意味着給接下來的活動留出更多的
時間。
#include <bits/stdc++.h>
using namespace std;
const int N = 10000+5;
struct node {
int s,f;
node(int _s,int _f) {
s = _s; f = _f;
}
node(){};
bool operator < ( const node &a ) const {
if ( a.f!=f ) return f>a.f;
else return s>a.s;
}
};
bool cmp( const node &a,const node b ) {
return a.s<b.s;
}
vector<node> vec;
priority_queue<node> que;
int main()
{
int n;
int s,f;
cin>>n;
for ( int i=0; i<n; i++) {
scanf("%d%d",&s,&f);
vec.push_back( node(s,f) ) ;
}
sort( vec.begin(),vec.end(),cmp );
que.push( vec[0] ) ;
node t;
for ( int i=1; i<n; i++ ) {
t = que.top();
if ( vec[i].s<t.f ) {
que.push( vec[i] ) ;
} else {
que.pop();
que.push( vec[i] ) ;
}
}
cout<<que.size()<<endl;
return 0;
}