Cod sursa(job #362257)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 8 noiembrie 2009 18:46:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>

int v[16001],s,n,max,k;

int transport(int x)
{
 int y=0,z=1,i;
 for (i=1;i<n+1;i++)
 {
  if (y+v[i]<=x) y+=v[i];
  else {
	y=v[i];
	++z;
       }
 }
 return z;
}


int cautbin(int x)
{
    int lo, hi, mid, last = 0;

    for (lo = max, hi = s; lo <= hi; )
    {
	mid = lo + (hi-lo) / 2;
	if (transport(mid)<=x) last = mid, hi = mid-1;
	else lo = mid+1;
    }
    return last;
}

int main()
{
 int i;
 freopen("transport.in","r",stdin);
 freopen("transport.out","w",stdout);
 scanf("%d%d",&n,&k);
 for (i=1;i<n+1;i++)
 {
  scanf("%d",&v[i]);
  s+=v[i];
  if (v[i]>max) max=v[i];
 }
 printf("%d",cautbin(k));
 return 0;
}