题目地址:zoj3778
题意就是类似以前听到的烤面包的故事.. 如果m>=n, maxA[i] ,那么当然每次都可以让每一个(只要还需要减少的)减小 ,那么一定是maxA[i] 次。
m<n时 如果我们分两种情形考虑1 如果每一次都能恰好使得m个数减小,那么次数当然就是sumA[i]/m. 2 如果sumA[i]%m !=0 那么最后一次不能整除,那么在1的基础上再加上最后一次 3 如果再中间存在一次(取出第一次),非0的个数已经小于m了,我们观察当前的情况。那么剩下需要的次数一定是maxA【i】(当前的) 连接起来,总共就是max[i]
于是,我们只需要取这两者之间的较大值就行。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m;
int sum=0;
int maxn=0;
int ans;
cin>>n>>m;
int temp;
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
maxn=max(maxn,temp);
sum+=temp;
}
ans=sum/m;
if(sum%m!=0)
{
ans++;
}
ans=max(ans,maxn);
cout<<ans<<endl;
}
}