Cod sursa(job #365294)

Utilizator Cristi09Cristi Cristi09 Data 18 noiembrie 2009 12:47:55
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
long n,k,max,var;
long a[16000],suma=0;
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",&var);
	 if(var>max)max=var;
	 if(i)a[i]=a[i-1]+var;
	 else a[i]=var;
  }
  fclose(f);
  var=a[n-1]/k;

  if(var<max)var=max;

  int ok=1,ind=-1,pred=-1,nrTrans=0,A=0,B=16000,C;

  while(ok)
  {  suma=0;

	 if(nrTrans==k-1&&a[n-1]-a[pred]<=var)ind=n;
	 else if(nrTrans==k-1)suma=var+1;

	 while(suma<=var&&ind<n)
	 {
		C=(A+B)/2
		suma=a[C]-a[pred];
		if(suma<var)A=C+1;
		++ind;
		if(ind==n)continue;
		suma=0;
		suma=a[ind];
		if(nrTrans)suma-=a[pred];
	 }
	 if(ind==n){ok=0;continue;}

	 --ind;
	 pred=ind;
	 ++nrTrans;

	 if(nrTrans==k)
		{++var;nrTrans=0;ind=pred=-1;}
  }
  FILE*g=fopen("transport.out","w");
  fprintf(g,"%d\n",var);
  fclose(g);
  return 0;
}