Cod sursa(job #213014)

Utilizator znakeu2znakeu znakeu2 Data 8 octombrie 2008 09:55:39
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
#define MAXN 16001


int v[MAXN];
int n,k,S=0;

void citire()
{
	freopen("transport.in","r",stdin);
	int i;
	
	scanf("%d%d",&n,&k);
	
	for (i=0; i<n; ++i)
	{
		scanf("%d",&v[i]);
		S+=v[i];
	}
}

inline int verif(int x)
{
	int a,b=1,i;
	
	a=0;
	for (i=0; i<n; ++i)
	{
		if (a+v[i]<=x)
		{
			a+=v[i];			
		}
		else
		{
			a=v[i];
			b++;			
		}		
	}
	return b;
}

void wtfpie ()
{
	int s=1, e=S, m, b;
	
	m=(s+e)/2;
	
	while (s<e)
	{
		b=verif(m);
		
		if (b<k)
			e=m-1;
		
		if (b==k)
			e=m;
		
		if (b>k)
			s=m+1;
		
		m=(s+e)/2;
	}
	
	freopen("transport.out","w",stdout);
	printf("%d\n",m);
}

int main()
{
	citire();
	wtfpie();
	
	return 0;
}