Cod sursa(job #2892040)

Utilizator Daria09Florea Daria Daria09 Data 20 aprilie 2022 16:05:02
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
#define nmax 16005
using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");
int n, k, ans;
int volumes[nmax];

bool check_volume(int volume) {
  int transports = 0;
  int current_volume = 0;

  for (int i = 0; i < n; ++i)
    if (volumes[i] > volume) {
      transports = k + 1;
      break;
    }
  else
  if (current_volume + volumes[i] > volume) {
    ++transports;
    current_volume = volumes[i];
  } else
    current_volume += volumes[i];

  ++transports;

  if (transports > k)
    return false;

  return true;
}

void solve() {
  int mid, left, right;

  left = 0;
  right = 16005 * n + 1;

  while (left < right) {
    mid = (left + right) / 2;

    if (check_volume(mid) == true)
      right = mid;
    else
      left = mid + 1;
  }

  g << left;
}

int main() {
  f >> n >> k;

  for (int i = 0; i < n; ++i) 
    f >> volumes[i];

  solve();
  return 0;
}