Cod sursa(job #140734)

Utilizator Mishu91Andrei Misarca Mishu91 Data 22 februarie 2008 10:58:34
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<cstdio>

FILE *fin=freopen("transport.in","r",stdin),
     *fout=freopen("transport.out","w",stdout);

int n,t,a[16000],min,max;

void citire()
{
  scanf("%d %d",&n,&t);
  for(int i=0;i<n;i++)
  {
    scanf("%d",a+i);
    if(a[i]>min) 
      min=a[i];
    max+=a[i];
  }
}

void solve()
{
  int m,li=min,lf=max;
  while(li<=lf)
  {
    m=(li+lf)/2;
    int k=0;
    for(int i=0;i<n;)
    {
      if(a[i]+a[i+1]<=m && i+1<n)
      {
        while(a[i]+a[i+1]<=m && i+1<n) i++;
        k++;
      }
      else i++,k++;
    }
    if(k>t) 
      li=m;
    if(k==t)
    {
      printf("%d",m);
      return;
    }
    else
      lf=m;
  }
} 
    
    
int main()
{
  citire();
  solve();
  return 0;
}