C - Talented Chef ZOJ - 3778

As we all know, Coach Gao is a talented chef, because he is able to cook M dishes in the same time. Tonight he is going to have a hearty dinner with his girlfriend at his home. Of course, Coach Gao is going to cook all dishes himself, in order to show off his genius cooking skill to his girlfriend.

To make full use of his genius in cooking, Coach Gao decides to prepare N dishes for the dinner. The i-th dish contains Ai steps. The steps of a dish should be finished sequentially. In each minute of the cooking, Coach Gao can choose at most M different dishes and finish one step for each dish chosen.

Coach Gao wants to know the least time he needs to prepare the dinner.


Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

The first line contains two integers N and M (1 <= N, M <= 40000). The second line contains N integers Ai (1 <= Ai <= 40000).

Output

For each test case, output the least time (in minute) to finish all dishes.

Sample Input
2
3 2
2 2 2
10 6
1 2 3 4 5 6 7 8 9 10
#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;

/*
The mentality is not bad. This time, I have some ideas. It’s not that I don’t have any ideas. I have inspiration in my head, but I almost practiced. I missed a lot.
1. I thought that it should be sum/n(+1), and then my teammates threw me a set of 1 1 6. I found out at that time, our conclusion was wrong, but we forgot
 One of our scopes of application, that is to say, our guesses, are not directly all the answers, especially for questions like the latter that have been fiddling for a long time
 It is more likely that it is the answer that each little point finally comes up with, or accumulate experience.
 The maximum value, which is the largest in some cases, but also the smallest in some cases (our number of times cannot be less than this max_val
*/

int main(){
	
	int T;
	scanf("%d",&T);
	while(T--){
		int n,m;
		scanf("%d %d",&n,&m);
		ll sum=0,max_=0;
		for(int i=1;i<=n;i++){
			ll val;
			scanf("%lld",&val);
			sum+=val;
			max_=max(max_,val);
		}
		ll ans=sum/m;
		if(sum%m)ans++;
		years=max(years,max_);
		printf("%lld\n",ans);
	}
	return 0;
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325901199&siteId=291194637
ZOJ
ZOJ