Cod sursa(job #741622)

Utilizator dadudadUdrea Dragos dadudad Data 26 aprilie 2012 16:45:34
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>

int v[16001];
 
int main()

{

int n=0,i=0,start=0,mid=0,stop=0,t=1,k=0,x=0,rez=0,j=0;

freopen("transport.in","r",stdin);

freopen("transport.out","w",stdout);

scanf("%d%d",&n,&k);

for (i=0; i<n; ++i)

{

scanf("%d",&v[i]);

stop+=v[i];

if (v[i]>start)

start=v[i];

}

if (n<50)

for (i=start; i<stop+1; ++i)

{

x=i;

t=1;

for (j=0; j<n; ++j)

if (x>=v[j])

x-=v[j];

else

{

++t;

x=i-v[j];

}

if (t<=k)

{

rez=i;

i=stop+2;

}

}

else

{

while(stop>start)

{

mid=(stop+start)/2;

x=mid;

for (i=0; i<n; ++i)

if (x>=v[i])

x-=v[i];

else

{

++t;

x=mid-v[i];

}

if(t>k)

start=mid+1;

else

{

stop=mid-1;

rez=mid;

}

t=1;

}

--rez;

x=rez;

for (i=0; i<n; ++i)

{

if (x>=v[i])

x-=v[i];

else

{

++t;

x=rez-v[i];

}

}

if (t>k)

++rez;

}

printf("%d",rez);

return 0;

}