Cod sursa(job #2003429)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 22 iulie 2017 21:25:18
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>

const int MAXN = 1e4 + 6e3;

int v[MAXN];

int main() {
  int n, k, cc, st, dr, m, s;
  FILE *f = fopen("transport.in", "r");
  fscanf(f, "%d%d", &n, &k);
  st = dr = 0;
  for (int i = 0; i < n; ++i) {
    fscanf(f, "%d", &v[i]);
    if (st < v[i]) {
      st = v[i];
    }
    dr += v[i];
  }
  fclose(f);
  while (st <= dr) {
    m = (st + dr) >> 1;
    s = 0;
    cc = 1;
    for (int i = 0; i < n; ++i) {
      s += v[i];
      if (s > m) {
        ++cc;
        s = v[i];
      }
    }
    if (cc > k) {
      st = m + 1;
    } else {
      dr = m - 1;
    }
  }
  f = fopen("transport.out", "w");
  fprintf(f, "%d\n", st);
  fclose(f);
  return 0;
}