LJUBOMORA
用二分法,求出可能的最大值
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
int a[300010];
int cmp(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int main()
{
int M, N;
scanf("%d %d", &N, &M);
for (int i = 0; i < M; i++)
{
scanf("%d", &a[i]);
}
qsort(a, M, sizeof(int), cmp);
int first = 1, mid, last = a[M - 1];
for (; last > first + 1;)
{
mid = (first + last) / 2;
int n = 0;
for (int i = 0; i < M;)
{
if (a[i] <= mid)
{
n++;
i++;
}
else
{
if (a[i] % mid == 0)
{
n = n + a[i] / mid;
}
else
{
n = n + a[i] / mid + 1;
}
i++;
}
}
if (n > N)
{
first = mid;
}
else
{
last = mid;
}
}
if (last == first)
{
printf("%d", last);
}
else
{
printf("%d", last);
}
}

浙公网安备 33010602011771号