Cod sursa(job #2004192)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 25 iulie 2017 11:30:29
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int st[16001], n, nrDrum;//date de intrare
int capMin, capMax;//capacitatea minima este val maxima din stiva
//capacitatea maxima este suma

void citire(){
  in >> n >> nrDrum;
  for(int i = 1; i <= n; i++){
    in >> st[i];
    if(st[i] > capMin){
      capMin = st[i];
    }
    capMax += st[i];
  }
}

int nrTransporturi(int capacitate){
  int nrTrans = 1, unTrans = 0;
  for(int i = 1; i <= n; i++){
    unTrans += st[i];
    if(unTrans > capacitate){
      nrTrans++;
      unTrans = st[i];
    }
  }
  return nrTrans;
}

int sol = 0;

void cautareBinara(int & st, int dr){
  if(st <= dr && st >= capMin && dr <= capMax){
    int mij = (st + dr) / 2;
    int var = nrTransporturi(mij);
    if(var > nrDrum){//capacitate prea mica, ma duc in dr
      st = mij + 1;
    }
    else{//capacitate prea mare, ma duc in st
          dr = mij - 1;
    }
    cautareBinara(st, dr);
  }
}

void afisare(){
  cautareBinara(capMin, capMax);
  sol = capMin;
  out << sol;
}

int main(){
  citire();
  afisare();
  return 0;
}