洛谷 P4447 AHOI2018初中組 分組

2021-10-02 14:17:31 字數 1450 閱讀 4095

題目

一開始沒讀懂題,直接排序 + 模擬找最短長度,像 6 1 2 3 1 2 3這組資料這種查詢方法結果是1,正解是3

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

intmain()

sort

(power, power + n)

;int last_power = power[0]

-1, len =

0, min_len =

1e9+1;

for(

int i =

0; i < n; i++

)else

last_power = power[i];}

min_len =

min(min_len, len)

; cout << min_len << endl;

return0;

}

因為看標籤上寫著二分答案,又去看了二分答案的內容,結果寫了一天也沒二分出來,感覺用二分做太繁瑣了。

最後還是用了貪心+佇列

先對所有人的能力值進行排序(從小到大),遍歷一遍所有人的能力值,每遍歷乙個人時在佇列裡尋找隊尾恰好為此人能力-1,優先查詢佇列人數少的,每遍歷乙個人,將佇列排一次序(按照佇列人數從小到大)

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

struct queue

;bool

cmp(queue a, queue b)

intmain()

sort

(power, power + n)

; queue que[n +1]

;for

(int i =

0; i < n; i++

)int cnt =0;

//記錄佇列的個數

for(

int i =

0; i < n; i++)}

if(!find)

sort

(que, que + cnt, cmp);}

cout << que[0]

.size << endl;

return0;

}

洛谷 P4447 AHOI2018初中組 分組

題目 總共有n個隊員,每個人都有乙個實力值a i 把n個隊員分成若干個小組。要求分成的每個小組的隊員實力值連續,同時,乙個隊不需要兩個實力相同的選手。給出乙個合法的分組方案,滿足所有人都恰好分到乙個小組。使得人數最少的組人數最多,輸出人數最少的組人數的最大值。注意 實力值可能是負數,分組的數量沒有限...

P4447 AHOI2018初中組 分組(貪心

傳送門 思路 貪心。將陣列從小到大排好序後,用優先佇列維護每個組的當前最大實力值和人數,按照實力值為第一關鍵字,人數為第二關鍵字排序。討論一下 因為我們是按實力值從小到大排序的,所以不會出現a i a i a i 隊首實力值的情況。1.若a i a i a i 不等於當前隊首實力值 1 1 1,則該...

P4447 AHOI2018初中組 分組 貪心

p4447 ahoi2018初中組 分組 首先想到對資料進行某種排序後順序處理,sort 因此是公升序 就可以了.一開始看到演算法標籤裡有個佇列就開了優先佇列,後來發現沒必要而且讓 看起來很複雜 最初想到的處理方式是遍歷公升序排序後的每個資料,對於每個資料遍歷所有隊伍 用二維陣列儲存所有隊伍的所有成...