Cod sursa(job #136784)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 15 februarie 2008 22:39:09
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>
long int n,k,i,v[16002],c1,c2,sol;
long int cbin(long int cmin,long int cmax);
long int merge(long int c);
int main()
{
	FILE *f,*g;f=fopen("transport.in","r");g=fopen("transport.out","w");
	fscanf(f,"%ld%ld",&n,&k);
	for(i=1;i<=n;i++)
	{ fscanf(f,"%ld",&v[i]);c1=(c1>v[i])?c1:v[i];c2+=v[i];}
	sol=cbin(c1,c2);
	fprintf(g,"%ld\n",sol);
	fcloseall();
	return 0;
}
long int cbin(long int cmin,long int cmax)
{       long int cmed;
	if(cmin==cmax) return cmin;
	cmed=(cmin+cmax)/2;
	if(merge(cmed))return cbin(cmin,cmed);
	return cbin(cmed+1,cmax);
}
long int merge(long int c)
{
	long int nt,p,incarcat;
	nt=0;p=1;incarcat=0;
	while(nt<k&&p<=n)
	{ if(incarcat+v[p]<=c){incarcat+=v[p];p++;}
	  else {nt++;incarcat=0;}
	}
	if(nt==k)return 0;
	return 1;
}