Cod sursa(job #408570)

Utilizator AnteusPatrascoiu Mihai Anteus Data 3 martie 2010 09:05:08
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 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,ver;
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];
}
}

void suma() {
int i=1;
c=1;
while (i<=n && c<=k)
	{
		s-=v[i++];
		if (s<0)
			{
				s=s2-v[i-1];
				c++;
			}
	}
}

int main() {
citire();
ls=max;
ld=s;
while (1)
{
	s=ls+(ld-ls)/2;  s2=s;
	suma();
	if (c==k)
	{
		if (s2<m || !m)
			m=s2;
		ld=s2;
	}
	if (c<k)
	{
		ld=s2;
	}
	if (c>k)
	{
		ls=s2;
	}
	if (ver==s2)
		break;
	ver=s2;
}
if (ls==ld)
	m=ld;
if (!m)
	m=ld;
fprintf (g, "%d", m);
return 0;
}