傳送門
思路:貪心。將陣列從小到大排好序後,用優先佇列維護每個組的當前最大實力值和人數,按照實力值為第一關鍵字,人數為第二關鍵字排序。
討論一下:
因為我們是按實力值從小到大排序的,所以不會出現a[i
]<
a[i]<
a[i]
<
隊首實力值的情況。
1.若a[i
]a[i]
a[i]
不等於當前隊首實力值+1+1
+1,則該組不會再發生變化,答案取最值,彈出。
2.若隊列為空或者當前隊首實力值=a[
i]
=a[i]
=a[i
],則建立以a[i
]a[i]
a[i]
乙個新組。
3.滿足a[i
]=
a[i]=
a[i]
=隊首實力值+1+1
+1,更新該組實力值和人數。
最後所有組人數取最值即可。
時間複雜度:o(n
logn
+2n)
o(nlogn+2n)
o(nlog
n+2n
)
#include
using
namespace std;
typedef
long
long ll;
const
int n=
1e5+
5,m=
1e6+
5,inf=
0x3f3f3f3f
,mod=
1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define pii pair
#define fi first
#define se second
int n,a[n]
,ans=
1e9;
priority_queueq;
intmain()
if(q.
empty()
||q.
top(
).fi==
-a[i]))
;continue;}
pii now=q.
top(
);q.
pop();
now.fi--
,now.se--
; q.
push
(now);}
while
(!q.
empty()
) ans=
min(ans,
-q.top()
.se)
,q.pop()
;printf
("%d\n"
,ans)
;return0;
}
P4447 AHOI2018初中組 分組 貪心
p4447 ahoi2018初中組 分組 首先想到對資料進行某種排序後順序處理,sort 因此是公升序 就可以了.一開始看到演算法標籤裡有個佇列就開了優先佇列,後來發現沒必要而且讓 看起來很複雜 最初想到的處理方式是遍歷公升序排序後的每個資料,對於每個資料遍歷所有隊伍 用二維陣列儲存所有隊伍的所有成...
洛谷 P4447 AHOI2018初中組 分組
題目 總共有n個隊員,每個人都有乙個實力值a i 把n個隊員分成若干個小組。要求分成的每個小組的隊員實力值連續,同時,乙個隊不需要兩個實力相同的選手。給出乙個合法的分組方案,滿足所有人都恰好分到乙個小組。使得人數最少的組人數最多,輸出人數最少的組人數的最大值。注意 實力值可能是負數,分組的數量沒有限...
洛谷 P4447 AHOI2018初中組 分組
題目 一開始沒讀懂題,直接排序 模擬找最短長度,像 6 1 2 3 1 2 3這組資料這種查詢方法結果是1,正解是3 include include include include include include include include using namespace std typedef...