Pagini recente » Cod sursa (job #1451127) | Cod sursa (job #316647) | Cod sursa (job #3134236) | Cod sursa (job #2529491) | Cod sursa (job #365252)
Cod sursa(job #365252)
#include<stdio.h>
//#include<conio.h>
int n,k,max,var;
long a[16000],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=0,B=n,C,lo;
while(ok)
{ suma=var+1;
if(nrTrans==k-1&&a[n-1]-a[pred]<=var)ind=n;
else if(nrTrans==k-1)suma=var+1;
A=ind;lo=0;B=n;
while(suma>var&&!lo)
{
C=(A+B)/2;
suma=a[C];
if(nrTrans)suma-=a[pred];
ind=C;
if(suma>var)
B=C-1;
else
{lo=1;
while(suma<=var&&ind<n)
{
++ind;
if(ind==n)continue;
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;
}