Cod sursa(job #141291)

Utilizator eddieOlariu Eduard Iuliu eddie Data 22 februarie 2008 22:40:38
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

long n, k, i, poz1, poz2, vb1, mij, sum, a[16000], tra, sol;

int main() {
	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);
	scanf("%ld%ld", &n, &k);
	for (i = 1;i <= n; ++i) {
		scanf("%ld", &a[i]);
		if (poz1 < a[i]) poz1 = a[i];
		poz2 = poz2 + a[i];
	}
	vb1 = 0;
	a[n + 1] = 100000000;
	while (poz1 <= poz2) {
		mij = (poz1 + poz2) / 2;
		sum = 0;
		tra = 0;
		for (i = 1;i <= n; ++i) {
			sum = sum + a[i];
			if (sum + a[i + 1] > mij) {
				tra++;
				sum = 0;
			}
		}
		if (tra <= k) {
			sol = mij;
			poz2 = mij - 1;
		} else {
			poz1 =  mij + 1;
		}
	}
	printf("%ld", sol);
	return 0;
}