51nod 1428 活動安排問題

2021-07-12 04:02:27 字數 1133 閱讀 4786

1428 活動安排問題

有若干個活動,第i個開始時間和結束時間是[si,fi),同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?

input

第一行乙個正整數n (n <= 10000)代表活動的個數。

第二行到第(n + 1)行包含n個開始時間和結束時間。

開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000

output

一行包含乙個整數表示最少教室的個數。

input示例

3 1 2

3 4

2 9

output示例

2 **這一題也就是求時間段重複最多的層數,網上看了一些**,發現**本身還可以有很多的優化,而且一些**進行了不必要的操作,會誤導很多人。

最關鍵的是維持乙個關於結束時間的最小堆,最終最小堆的長度就是需要教師的個數**

//也就是找重疊最多的個數

#include

#include

#include

#include

#include

#include

using

namespace

std;

//公升序排,開始時間的優先順序大於結束時間的優先順序

bool cmp(const pair& p1, const pair& p2)

int main()

//對pair的排序,排序之後可以通過減枝降低時間的複雜度

sort(pairvec.begin(), pairvec.end(), cmp);

//維持乙個用結束時間作為元素的最小堆

priority_queue,greater > minheap;

//初始化

minheap.push(pairvec[0].second);

//需要的教室數,就是最終堆的元素個數

for (int i = 1; i < n;++i)

minheap.push(pairvec[i].second);

}cout

<< minheap.size() << endl;

}return

0;}

51Nod 1428 活動安排問題

acm模版 將所有開始時間和結束時間存入乙個陣列內,然後排序,最後從頭至尾遍歷,初始化flag 0,遇見開始時間則flag 反之則更新res並flag include include include using namespace std const int maxn 1e4 10 struct p...

51nod 1428 活動安排問題

有若干個活動,第i個開始時間和結束時間是 si,fi 同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?input 第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於10000...

51nod 1428 活動安排問題

1428 活動安排問題 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 input 第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000 ou...