Cod sursa(job #2923038)

Utilizator miramaria27Stroie Mira miramaria27 Data 11 septembrie 2022 11:46:39
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;

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

// Given a capacity c, we compute the required tranports number
int transportsNo(int c, vector<int> &volum) {
  int sumSerie = 0, noSerie = 1;
  for (auto vol : volum) {
    if (sumSerie + vol > c) {
      noSerie++;
      sumSerie = vol;
    } else {
      sumSerie += vol;
    }
  }
  return noSerie;
}

// use reference for vector
void binarySearch(int left, int right, int K, int &sol, vector<int> &volum) {
  if (left <= right) {
    int mid = left + (right - left) / 2;
    if (transportsNo(mid, volum) > K) {
      binarySearch(mid + 1, right, K, sol, volum);
    } else {
      sol = mid;
      binarySearch(left, mid - 1, K, sol, volum);
    }
  }
}

int main() {
  int N, K;
  vector<int> volum;
  fin >> N >> K;
  int ma = 0, sum = 0;
  for (int i = 0; i < N; i++) {
    int vol;
    fin >> vol;
    volum.push_back(vol);
    sum += volum[i];
    if (ma < volum[i]) {
      ma = volum[i];
    }
  }
  int sol = -1;
  binarySearch(ma, sum, K, sol, volum);
  fout << sol;
}