題目
一開始沒讀懂題,直接排序 + 模擬找最短長度,像 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 因此是公升序 就可以了.一開始看到演算法標籤裡有個佇列就開了優先佇列,後來發現沒必要而且讓 看起來很複雜 最初想到的處理方式是遍歷公升序排序後的每個資料,對於每個資料遍歷所有隊伍 用二維陣列儲存所有隊伍的所有成...