Cod sursa(job #2662458)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 24 octombrie 2020 09:59:29
Problema Transport Scor 90
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
//Mihai Priboi

#include <stdio.h>
#include <stdlib.h>

int v[16000], n;

int cautbin( int x ) {
  int r, pas;
  pas = 1 << 27;
  r = 0;
  while( pas ) {
    if( transporturi(r + pas) > x )
      r += pas;
    pas /= 2;
  }
  return r;
}

int transporturi( int vol ) {
  int k, vcur, i;
  k = 1;
  vcur = 0;
  for( i = 0; i < n; i++ ) {
    if( vcur + v[i] <= vol )
      vcur += v[i];
    else if( v[i] > vol )
      return 16000;
    else {
      k++;
      vcur = v[i];
    }
  }
  return k;
}

int main() {
  FILE *fin, *fout;
  int k, i, r;
  fin = fopen( "transport.in", "r" );
  fscanf( fin, "%d%d", &n, &k );
  for( i = 0; i < n; i++ )
    fscanf( fin, "%d", &v[i] );
  fclose( fin );
  fout = fopen( "transport.out", "w" );
  r = cautbin(k);
  while( transporturi(r) > k ) r++;
  fprintf( fout, "%d", r );
  fclose( fout );
  return 0;
}