Cod sursa(job #234452)

Utilizator Omega91Nicodei Eduard Omega91 Data 20 decembrie 2008 22:37:15
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>

typedef unsigned int ui;
ui N, K, a[16002];

bool rez(ui maxload)
{
	ui i, trload = 0, trips = 1;
	for (i = 0; i != N && trips <= K; ++i) {
		trload += a[i];
		if (trload > maxload) {
			trload = a[i];
			++trips;
		}
	}
	return trips <= K;
}

ui bin(ui l, ui r)
{
	ui p, ans;
	while(l <= r) {

		p = (l + r) / 2;
		//fprintf(stderr, "l: %d    r: %2d    p: %2d    rez: %2d\n", l, r, p, rez(p));
		if ( rez(p) ) {
			r = p - 1;
			ans = p;
		}
		else l = p + 1;
	}
	return ans;
}

int main()
{
	ui x, s = 0, max = 0, i;
	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);
	scanf("%d %d\n", &N, &K);
	for (i = 0; i != N; ++i) {
		scanf("%d\n", &x);
		a[i] = x;
		s += x;
		if (max < x) max = x;
	}
	printf("%d\n", bin(max, s));
	//fprintf(stderr, "%d\n", bin(max, s));
	fclose(stdin);
	fclose(stdout);
	return 0;
}