Cod sursa(job #96662)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 2 noiembrie 2007 17:36:56
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

long n, k, i, poz1, poz2, vb1, mij, sum, a[1600], 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 (abs(poz1 - poz2) != 1) {
		mij = (poz1 + poz2) / 2;
		sum = 0;
		tra = 0;
		for (i = 1;i <= n; ++i) {
			sum = sum + a[i];
			if (sum + a[i] > mij) {
				tra++;
				sum = 0;
			}
		}
		if (tra <= k) {
			sol = mij;
			poz2 = mij;
		} else {
			poz1 =  mij;
		}
	}
	printf("%ld", sol);
	return 0;
}