Cod sursa(job #480790)

Utilizator IoannaPandele Ioana Ioanna Data 29 august 2010 16:22:18
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>
#define nmax 16005
int n,k;
int v[nmax],max;
long s,w;

void read()
{
	int i;
	scanf("%d%d",&n,&k);
	max=0;
	for (i=1;i<=n;i++)
	{
		scanf("%d",&v[i]);
		if (v[i]>max)
			max=v[i];
		s+=v[i];
	}	
}

int rez(long m)
{
	int i,p;
	long u;
	u=0;
	p=0;
	for (i=1;i<=n;i++)
	{
		if (u+v[i]>m)
		{
			p++;
			u=0;
		}
		u+=v[i];		
	}
	if (u+v[i]<=m)
		return p+1;
	return p;
}

void cautbin(long st,long dr)
{
	long m;
	int p;
	if (st<=dr)
	{
		m=(st+dr)/2;
		p=rez(m);
		if (p<=k)
		{
			w=m;
			cautbin(st,m-1);
		}
		else cautbin(m+1,dr);			
	}
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	read();
	cautbin(max,s);
	printf("%ld\n",w);
	return 0;
}