Pagini recente » Cod sursa (job #808704) | Borderou de evaluare (job #2789726) | Cod sursa (job #1229988) | Cod sursa (job #1021202) | Cod sursa (job #365292)
Cod sursa(job #365292)
#include<stdio.h>
//#include<conio.h>
int n,k,max,var;
long a[160000],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;
}