Cod sursa(job #2542957)

Utilizator popashtefan10Popa Stefan popashtefan10 Data 10 februarie 2020 18:54:24
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <cstdio>
#define NMAX 16000
#define MAX 256000000

using namespace std;

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

long long ntr(long long cap) {
  long long 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;
}

long long cb(long long st, long dr) {
  long long mij, last = MAX;

  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);
  long long maxim = 0;

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

  printf("%lld", cb(maxim, MAX + 5));

  return 0;
}