题目
题意:给定
n
n
n个数
m
i
m_i
mi,每个数大小不超过
k
k
k,要求将这
n
n
n个数组合成若干集合,要求每个集合中,大于等于
i
i
i的数不超过
c
i
c_i
ci个,求集合的最小数,并给出任意方案。
题解:要使集合最小,可以贪心的均摊数,先将这
n
n
n个数存在桶计数,从后往前,求出每个后缀和均摊
c
i
c_i
ci的最小数,取
m
a
x
max
max即可。求出集合数
q
q
q后,只要将这些数排序,然后均匀放置在这
q
q
q个集合即可。
#include
using namespace std;
const int maxn = 200010;
int m[maxn],c[maxn];
int mp[maxn];
int n,k;
int main() {
scanf("%d%d",&n,&k);
for(int i = 0;i
关注
打赏
