Cod sursa(job #474061)

Utilizator HoriaClementHoriaC HoriaClement Data 2 august 2010 12:11:07
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <cstdio>


int v[1<<14],n,k;

void citire()
{
	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);
		v[i]+=v[i-1];
	}

}
int cautbin(int x)
{
	int i,step=1<<14;
	for (i=0;step;step>>=1)
		if (i+step<=n && v[i+step]<=x)
			i+=step;
	return i;
}

bool ok(int x)
{
	int i,j;
	for (i=0,j=1;j<=k && i<=n;j++)
		i=cautbin(v[i]+x);
	return i==n;
}

int bs()
{
	int i,step=1<<28;
	for (i=0;step;step>>=1)
		if (!ok(i+step))
			i+=step;
	return i+1;
}

int main()
{
	citire();
	printf("%d",bs());
	return 0;
}