Cod sursa(job #356792)

Utilizator pirvupirvu tudor pirvu Data 16 octombrie 2009 12:56:52
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<cstdio>

int n,k;

const int N = 1<<15;

int v[1<<15];

bool transport ( int q)
{
	int nr=1,x=q;
	
	for (int i=1;i<=n;i++)
	{
		if ( v[i]> q) return 0;
		
		if ( v[i] > x)
		{
		nr++;
		x=q-v[i];
		}		
		else x-=v[i];
		
	}
	
	if (nr <= k ) return 1;
		
	return 0;
}


int cautare()
{
	int i, pas=N;
	
	for (i=0;pas;pas>>=1)
		if (i+pas<N && !transport(i+pas))
			i+=pas;
	
		
	return i+1;
	
}

int main()
{
	
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	
	scanf("%d%d", &n , &k);
	
	for (int i=1;i<=n;i++)
		scanf("%d", &v[i]);
	
	int o= cautare();
	
	printf("%d", o);
	
	return 0;
}