Cod sursa(job #365291)

Utilizator Cristi09Cristi Cristi09 Data 18 noiembrie 2009 12:46:04
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
//#include<conio.h>
int n,k,max,var;
long a[160],suma=0;
int main()
{ //clrscr();
  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=var,B=a[n-1],bla=0;

  var=(A+B)/2;

  while(ok)
  {  suma=0;

	 while(suma<=var&&ind<n)
	 {
		++ind;
		if(ind==n)continue;
		suma=a[ind];
		if(nrTrans)suma-=a[pred];

	 }
	 ++nrTrans;
	 if(nrTrans>k){++var;ok=0;continue;}
	 if(nrTrans==k&&ind<n&&!bla)
		{A=var+1;var=(A+B)/2;nrTrans=0;ind=pred=0;}
	 if(nrTrans<k&&ind==n&&!bla)
	 {B=var-1;var=(A+B)/2;nrTrans=0;ind=pred=0;}

	 if(nrTrans==k&&ind==n)
	 {
	   var--;
	   nrTrans=0;ind=0;
	   if(bla==var)
	   {ok=0;
		continue;}
		bla=var+1;
	 }

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