Cod sursa(job #2542931)

Utilizator popashtefan10Popa Stefan popashtefan10 Data 10 februarie 2020 18:44:12
Problema Transport Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <cstdio>
#define NMAX 16000
#define MAX 256000

using namespace std;

int n, k;
int v[NMAX + 5];

int ntr(int cap) {
  int cs = 0, ans = 0;

  for(int i = 1; i <= n; i++) {
    if(cs + v[i] <= cap)
      cs += v[i];
    else {
      cs = v[i];
      ans++;
    }
  }

  return ans + 1;
}

int cb(int st, int dr) {
  int mij, last = -1;

  while(st <= dr) {
    mij = (st + dr) / 2;
    if(ntr(mij) <= k) {
      last = mij;
      dr = mij - 1;
    }
    else
      st = mij + 1;
  }

  return last;
}

int main() {
  freopen("transport.in", "r", stdin);
  freopen("transport.out", "w", stdout);

  scanf("%d %d", &n, &k);
  for(int i = 1; i <= n; i++)
    scanf("%d", &v[i]);

  printf("%d", cb(1, MAX));

  return 0;
}