Cod sursa(job #335697)

Utilizator ilincaSorescu Ilinca ilinca Data 31 iulie 2009 00:18:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h> 

#define max 256000000
#define nmax 16000

int n, k, a [nmax];


void scan ()
{
	int i;
	scanf ("%d%d", &n, &k);
	//--k;
	for (i=1; i <= n; ++i) 
		scanf ("%d", &a [i]);
}

bool ok (int v)
{
	int i, num=0, s=0;
	for (i=1; i <= n && num < k; ++i)
	{
		if (s+a [i] <= v) 
			s += a [i];
		else
		{
			if (a [i] > v) 
				return false;
			s=a [i];
			++num;
		}
	}	
	if (num == k) 
		return false;
	return true;
}

int ceva ()
{
	int s, i;
	for (s=1; s <= max; s <<= 1);
       	for (i=0; s; s >>= 1)
		if (i+s <= max && (!ok (i+s))) 
			i += s;
	return i+1;	
}

int main ()
{
	freopen ("transport.in", "r", stdin);
	freopen ("transport.out", "w", stdout);
	scan ();
	printf ("%d\n", ceva ());
	return 0;
}