Cod sursa(job #407384)

Utilizator AnteusPatrascoiu Mihai Anteus Data 2 martie 2010 11:58:25
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>
FILE *f=fopen ("transport.in", "r");
FILE *g=fopen ("transport.out", "w");
int n,k,i,ls,c,m,ld,s2,max;
int v[16001];
long s;

void citire (void) {
int i;
fscanf (f, "%d%d", &n, &k);
for (i=1;i<=n;i++)
{
	fscanf (f, "%d", &v[i]);
	if (max<v[i])
		max=v[i];
	s+=v[i];
}
}

int main() {
citire();
ls=max;
ld=s;
while (1)
{
	s=ls+(ld-ls)/2;
	s2=s; i=1; c=1;
	while (i<=n && c<=k)
	{
		s-=v[i++];
		if (s<0)
			{
				s=s2-v[i-1];
				c++;
			}
	}
	if (c==k)
	{
		m=s2;
		ls=max;
		ld=s2;
	}
	else
		if (c<k)
		{
			ls=max;
			ld=s2;
		}
		else
			if (m)
				break;
}
fprintf (g, "%d", m);
return 0;
}