Cod sursa(job #92485)

Utilizator tvladTataranu Vlad tvlad Data 15 octombrie 2007 19:00:29
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>

const int N = 16000;

int n,k;
int a[N];
int s,f;

int t ( int c ) {
	if (c < s) return 0x3f3f3f3f;
	int tr = 1, free = c;
	for (int i = 0; i < n; ++i) {
		if (free >= a[i]) {
			free -= a[i];
		} else {
			++tr;
			free = c;
			--i;
		}
	}
	if (free == c) --tr;
	return tr;
}

int bs() {
	int step,i;
	for (step = 1; step < f; step <<= 1);
	for (i = 0; step; step >>= 1)
		if (i + step < f && t(i + step) >= k)
			i += step;
	return i;
}

int main() {
	freopen("transport.in","rt",stdin);
	freopen("transport.out","wt",stdout);

	scanf("%d %d",&n,&k);
	s = -0x3f3f3f3f;
	f = 0;
	for (int i = 0; i<n; ++i) {
		scanf("%d",&a[i]);
		if (s < a[i]) s = a[i];
		f += a[i];
	}
	int c = bs();
	for (; c > s && t(c-1) <= k; --c);
	printf("%d\n",c);
	return 0;
}