Cod sursa(job #213023)

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

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

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

inline int verif(int x)
{
	int a=0,b=1,i;
	
	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;
	
	while (s<e)
	{
		m=(s+e)/2;	
		
		if (verif(m)<=k)
			e=m;
		else
			s=m+1;
	}
	
	freopen("transport.out","w",stdout);
	while (verif(e)<=k)
		--e;
	while (verif(e)>k)
		e++;		
	printf("%d\n",e);
}

int main()
{
	citire();
	wtfpie(); //OBEY THE PIE!!!
	
	return 0;
}