Cod sursa(job #1672900)

Utilizator Roxana2Roxana Gogoanta Roxana2 Data 3 aprilie 2016 11:39:32
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#include <stdlib.h>

int v[16001];

int main () {
  FILE *fin, *fout;
  int n, k, i, l1 = 0, l2 = 0, m, a, sum, tr;

  fin = fopen ( "transport.in", "r" );
  fout = fopen ( "transport.out", "w" );
  fscanf ( fin, "%d%d", &n, &k );
  for ( i = 0; i < n; i++ ) {
    fscanf ( fin, "%d", &v[i] );
    l2 += v[i];
    if ( v[i] > l1 )
      l1 = v[i];
  }
  while ( l1 != l2 ) {
    m = ( l1 + l2 ) / 2;
    sum = 0;
    tr = 1;
    for ( i = 0; i < n && tr <= k; i++ ) {
      if ( v[i] + sum <= m )
        sum += v[i];
      else {
        tr++;
        sum = v[i];
      }
    }
    if ( tr > k )
      l1 = m + 1;
    else
      l2 = m;
  }
  fprintf ( fout, "%d", l1 );
  fclose ( fin );
  fclose ( fout );
  return 0;
}