Cod sursa(job #377637)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 25 decembrie 2009 17:47:29
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#define DIM 16110

using namespace std;


int i, sum, A[DIM], upbound, lowbound, K, N;
int cbin (int low, int up)
{   
	int sol = 0, mid, k, x;
	while ( low <= up )
	{   
		mid = (low + up) / 2;
		k = 1;
		for ( x = 0, i = 1; i <= N ; i++)
		{   
			if ( A[i] > mid ) { k = DIM; break; }
			if ( x + A[i] <= mid ) x += A[i];
			else ++ k, x = A[i];
		}
		if ( !x ) --k;
		if (k > K) low = mid + 1;
		else if (k == K) sol = mid, up = mid - 1;
		else if ( k < K ) up = mid - 1;
	}
return sol;
}
    	
void solve ()
{
	scanf ("%d%d\n", &N, &K);
	for (i = 1; i <= N; i++)
	{
		scanf ("%d\n", &A[i]);
		if (lowbound < A[i]) lowbound = A[i];
		sum += A[i];
	}
	upbound = sum;
	printf ("%d\n", cbin (lowbound, upbound) );
}
int main ()
{
	freopen ("transport.in", "r", stdin);
	freopen ("transport.out", "w", stdout);
	solve ();
	return 0;
}