Cod sursa(job #723449)

Utilizator cdascaluDascalu Cristian cdascalu Data 25 martie 2012 14:45:26
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>

long n,k,max,a[16000],suma=0;
long bsearch();
int verif(long c);
int main()
{
  FILE*f=fopen("transport.in","r");
  fscanf(f,"%d%d",&n,&k);
  int i=0;

  for(i,max=0;i<n;++i)
  {
	 fscanf(f,"%d",&a[i]);
	 if(a[i]>max)max=a[i];
	 suma+=a[i];
  }
  fclose(f);

  FILE*g=fopen("transport.out","w");
  fprintf(g,"%d\n",bsearch());
  fclose(g);
  return 0;
}
long bsearch()
{
	long lo=max,hi=suma,c,last;

	while(lo<=hi)
	{
	   c=lo+(hi-lo)/2;
	   if(verif(c)<=k){last=c;hi=c-1;}
	   else lo=c+1;
	}
	return last;
}
int verif(long c)
{
	int i=0,s=0,x=0;
	while(i<n)
	{
	   if(a[i]>c)return 0;
	   if(a[i]+s<=c)s+=a[i];
	   else{s=a[i];++x;}
	   ++i;
	}
	return x+1;
}