Cod sursa(job #2718849)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 9 martie 2021 11:46:31
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

const int MAXP = 14;
const int MAXV = 16000;
const int MAXN = 16000;

int minim = 16001;
int saltele[MAXN];

int verif_trans( int k, int n, int volum ){
  int i, nr_trans, suma;
  suma = 0;
  i = 0;
  nr_trans = 0;
  while( i < n && nr_trans < k ){
    if( suma + saltele[i] > volum ){
      //out<<saltele[i]<<" "<<suma<<" "<<volum<<" "<<nr_trans<<'\n';
      suma = 0;
      nr_trans++;
    }
    suma += saltele[i];
    i++;
  }
  if( nr_trans < k && i == n ){
    if( volum < minim )
      minim = volum;
    return 1;
  }
  return 0;
}

int caut_bin( int k, int n ){
  int step, pos;
  step = 1<<MAXP;
  pos = 0;
  while( step ){
      if( pos + step <= MAXV && verif_trans( k, n, pos + step ) == 1 && pos + step < minim)
        pos+=step;
    step/=2;
  }
  return pos;
}

int main()
{
    int n, k, i;
    in>>n>>k;
    for( i = 0; i < n; i++ )
      in>>saltele[i];
    caut_bin(k, n);
    out<<minim;
    return 0;
}