Cod sursa(job #63476)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 28 mai 2007 21:48:10
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>
#define fin  "transport.in"
#define fout "transport.out"
#define Nmax 16001
#define Cmax 956000001

int N,K,v[Nmax];

inline int good(int k) {
int i,last=0,nr=1;
	for (i=1;i<=N;++i)
		if ( last + v[i] <= k )
			last+=v[i];
		else {
			last=v[i];
			++nr;
			if (nr>K)
				return 0;
		}
	return 1;
}

int go(int st,int dr) {
int m;
	m=(int) (long long)(st+dr) / 2;

	if ( st>dr )
		return m;

	if ( good(m) )

		if (!good(m-1))
			return m;
		else
			return go(st,m-1);
	else
		return go(m+1,dr);
}

int main() {
int i;
	freopen(fin,"r",stdin); freopen(fout,"w",stdout);

	scanf("%d%d",&N,&K);

	for (i=1;i<=N;++i)
		scanf("%d",&v[i]);

	printf("%d\n",go(1,Cmax));

	return 0;
}