版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/84856736
这道题真是折磨死我了。一看就知道是贪心,要排序,然后想了一个多小时,脑子真是越想越乱。
冷静冷静冷静!
慢慢想,最后想到了一个思路:用结构体存时段,按照起点从小到大排序。让第一个时段的终点进优先队列(从小到大排列)中,如果起点大于队头,就说明可以在同一个教室里面上课,就更新队头。最终队列长度就是所需的教室数。
ps:提交用c++11编译器
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstdio>
using namespace std;
struct time{
int t1,t2;
}a[10005];
bool cmp(time a,time b)
{
if(a.t1==b.t1)
return a.t2<b.t2;
return a.t1<b.t1;
}
int main()
{
int n,m,i,j;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i].t1>>a[i].t2;
sort(a,a+n,cmp);
int s1[10005],s2[10005];
priority_queue<int,vector<int>,greater<int> >q;
q.push(a[i].t2);
for(i=0;i<n;i++)
{
if(a[i].t1>=q.top())
q.pop();
q.push(a[i].t2);
}
cout<<q.size()<<endl;
}