想通了就简单。。想不通就难,思路就是把n-m的小端值摊到m个大端值里,看看摊下来的结果,如果还没有最大值大,那答案就是最大值,如果比最大值大,结果就是平摊值,有小数向上取整
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t, n, m, a[40000];
scanf("%d", &t);
while (t--)
{
scanf("%d %d", &n, &m);
int i, max = -1, sum = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (a[i] > max)
max = a[i];
sum += a[i];
}
int temp = sum % m ? sum / m + 1 : sum / m;
printf("%d\n", temp > max ? temp : max);
}
return 0;
}