Cod sursa(job #407289)

Utilizator RoswenRus Alexandru Roswen Data 2 martie 2010 10:54:44
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
FILE *f=fopen("transport.in","r"), *g=fopen("transport.out","w");
int v[16050],st,n,k,i,k1,s,max,s1,lkf,mij,lkw;

int main()
{
	fscanf(f, "%d%d", &n, &k);
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d", &v[i]);
		if(v[i]>max) max=v[i];
		s+=v[i];
	}
	
	st=max-1;
	
	s1=s, s=0;
	mij=(max+s1)/2;
	
	while(st<=s1)
	{	
		for(i=1;k1<=k && i<=n;i++)
		{
			s+=v[i];
			if(s+v[i+1]>mij || i==n)
			{
				k1++;
				s=0;
			}
		}
		
		if(k1<=k)
		{
			if(mij==lkf+1)
			{
				fprintf(g,"%d", mij);
				return 0;
			}
			else 
			{
				lkw=mij;
				s1=mij;
				mij=(st+s1)/2;
				k1=0, s=0;
			}
		}
		else 
		{	
			lkf=mij;
			st=mij;
			mij=(st+s1)/2;
			k1=0, s=0;
		}
		if(lkw==lkf+1)
		{
			fprintf(g,"%d", lkw);
			return 0;
		}
		if(lkw==max)
		{
			fprintf(g,"%d", lkw);
			return 0;
		}
	}
	
	return 0;	
}