Cod sursa(job #1817883)

Utilizator TincaMateiTinca Matei TincaMatei Data 28 noiembrie 2016 17:05:05
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>

const int MAX_N = 16000;
const int INFINIT = 1000000000;
int v[MAX_N];

bool transport(int n, int cap, int k) {
  int x, tr;
  tr = 1;
  x = 0;
  for(int i = 0; i < n; ++i) {
    x = x + v[i];
    if(x > cap) {
      tr++;
      x = v[i];
    }
  }

  if(tr <= k)
    return true;
  return false;
}

int cautare(int st, int dr, int k, int n) {
  int mid;
  bool ok;
  while(dr - st > 1) {
    mid = (st + dr) / 2;
    ok = transport(n, mid, k);
    if(!ok)
      st = mid;
    else
      dr = mid;
  }
  return dr;
}

int main() {
  int n, k, max;
  FILE *fin = fopen("transport.in", "r");
  fscanf(fin, "%d%d", &n, &k);
  max = 0;
  for(int i = 0; i < n; ++i) {
    fscanf(fin, "%d", &v[i]);
    if(v[i] > max)
      max = v[i];
  }
  fclose(fin);

  FILE *fout = fopen("transport.out", "w");
  fprintf(fout, "%d", cautare(max - 1, INFINIT, k, n));
  fclose(fout);
  return 0;
}