Cod sursa(job #298697)

Utilizator cotofanaCotofana Cristian cotofana Data 6 aprilie 2009 12:21:56
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#define dim 16010

using namespace std;

int n, st[dim], minim=0, maxim=0, k, sol;

int drum(int c)
{
	int ct=0, scur=0, i;
	for (i=1; i<=n; i++)
	{
		if (scur+st[i]>c)
		{
			scur=st[i];
			ct++;
		}
		else scur+=st[i];
	}
	ct++;
	return ct;
}

void cautare_binara(int lo, int hi)
{
	int mij=lo+(hi-lo)/2;
	
	if (drum(mij)<=k)
	{
		sol=mij;
		if (lo<=mij-1) cautare_binara(lo, mij-1);
	}
	else if (mij+1<=hi) cautare_binara(mij+1,hi);
}

int main()
{
	int i;
	freopen("transport.in", "r",stdin);
	freopen("transport.out", "w", stdout);
	scanf("%d %d\n", &n, &k);
	for (i=1; i<=n; i++) 
	{
		scanf("%d ", &st[i]);
		if (st[i]>minim) minim=st[i];
		maxim+=st[i];
	}
	cautare_binara(minim, maxim);
	printf("%d\n", sol);
	return 0;
}