Cod sursa(job #460691)

Utilizator deneoAdrian Craciun deneo Data 3 iunie 2010 17:04:12
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<cstdio>
#define MAX 16000*16001
int n, k, v[16001];
long canTransport(long x)
{
	long s=0, t=0, poz=1, i, da=1;
	while(poz<n && da) 
	{
		s=0;
		if(v[poz]>x)
			return 0;
		for(i=poz; i<=n && s<=x; ++i)
			s+=v[i];
		poz=i-1;
		++t;
		if(t>k)
			da=0;
		if(poz==n && s>x && t==k)
			return 0;
			
	}
	return da;
}

long cauta()
{
	long p, u, m;
	p=1; u=MAX;
	while(p<u)
	{
		m=(p+u)/2;
		if(canTransport(m))
		{
			u=m;
		}
		else
		{
			p=m+1;
		}
	}
	return (p+u)/2;
}

int main()
{
	long i;
	freopen("transport.in", "rt", stdin);
	freopen("transport.out", "wt", stdout);
	scanf("%d%d", &n, &k);
	for(i=1; i<=n; ++i)
		scanf("%d", &v[i]);
	canTransport(7);
	printf("%ld", cauta());
	return 0;
}