本文共 1443 字,大约阅读时间需要 4 分钟。
第一行一个正整数n (n <= 10000)代表活动的个数。第二行到第(n + 1)行包含n个开始时间和结束时间。开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
一行包含一个整数表示最少教室的个数。
31 23 42 9
2
#include#include #include #include #include #include #include using namespace std;struct Node{ int s,e; bool operator < (const Node o)const{ return s < o.s; }};int n;struct Node nodes[10000+5];priority_queue ,greater > pq; //保存结束时间int main() { ios::sync_with_stdio(false); cin >> n; for(int i = 0; i < n; ++i){ cin >> nodes[i].s >> nodes[i].e; } sort(nodes,nodes+n); int ans = 0; for(int i = 0; i < n; ++i){ if(!pq.empty()){ int e = pq.top(); if(nodes[i].s >= e){//如果开始时间大于某个结束时间,说明不需要新的教室 pq.pop();//把这个结束的取出来,此说该教室结束时间要更新 pq.push(nodes[i].e);//更新该教室的结束时间 } else{//如果 此时没有结束的 ++ans; pq.push(nodes[i].e); } } else{//处理第一个 ++ans; pq.push(nodes[i].e); } } cout << ans; return 0; }
转载地址:http://dhimi.baihongyu.com/