Cod sursa(job #1772543)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 6 octombrie 2016 20:34:32
Problema Transport Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <iso646.h>
#include <ctype.h>

#define NMAX  16000
#define SALTEA_MAX 16000
#define INFINIT 9000000

int stiva [ NMAX ] ;

int N, K, min, min2 ;

char testare (int cap ) {
  int i, s, transport ;

  s = 0 ;
  transport = 1 ;

  for (i = 0 ; i < N and stiva[i] < cap ; i++ ) {
    if (s + stiva[i] <= cap ) {
      s += stiva[i] ;
    }
    else {
      if (s > 0 ) {
        transport++;
        s = 0 ;
      }
    }
  }
  if (transport <= K and stiva[i] < cap ) {
    if (cap < min2 ) {
      min = transport ;
      min2 = cap ;
    }
    return 1 ;
  }
  return 2 ;
}

void caut_bin (int st, int dr ) {
  int pivot ;
  pivot = (st + dr ) / 2 ;
  if (st < dr-1 ) {
    if  (testare(pivot) == 1 )  {
      caut_bin(st, pivot) ;
    }
    else {
      caut_bin(pivot, dr ) ;
    }
  }
}
int main() {

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

  int i ;
  min =  INFINIT ;
  min2 = INFINIT ;

  fscanf (fin, "%d%d", &N, &K ) ;

  for (i = 0 ; i < N ; i++ ) {
    fscanf (fin, "%d", &stiva[i] ) ;
  }

  caut_bin(1, SALTEA_MAX ) ;

  fprintf (fout, "%d", min2 ) ;
  return 0;
}