Cod sursa(job #314181)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 10 mai 2009 19:50:49
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>

FILE *f,*s;

long int n,k,i,sum,max,rez,v[16005];

int corect( long int c)
{
	long int nr=1;
	long int suma=0;
	
	for(i=1;i<=n;i++)
	{
		suma+=v[i];
		
		if(suma>c)
		{
			nr++;
			suma=v[i];
		}	
		
		if(nr>k)
			return 0;
	}	
	
	return (nr<=k);
}	

long int cautareBinara()
{
	long int st=max;
	long int dr=sum;
	
	while(st<=dr)
	{
		long int m=(st+dr)/2;
		
		if(corect(m)&&!corect(m-1))
			return m;
		else
		{
			if(corect(m))
				dr=m-1;
			else
				st=m+1;
		}	
	}	
	
	return 0;
}

int main()
{
	f=fopen("transport.in","r");
	s=fopen("transport.out","w");
	
	fscanf(f,"%ld %ld\n",&n,&k);
	
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%ld\n",&v[i]);
		
		if(v[i]>max)
			max=v[i];
		
		sum+=v[i];
	}		
	
	rez=cautareBinara();
	
	fprintf(s,"%ld",rez);
	
	fclose(s);
	
	return 0;
}