Cod sursa(job #2661723)

Utilizator YusyBossFares Yusuf YusyBoss Data 22 octombrie 2020 16:50:54
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <stdio.h>
#define NMAX 16000
#define KMAX 16000

using namespace std;

int v[NMAX + 1];

bool ok (int mij, int n, int k) {
  int i, sum, cnt;

  sum = cnt = 0;
  i = 0;
  while (i < n && v[i] <= mij) {
    sum += v[i];
    if (sum > mij) {
      sum = v[i];
      cnt++;
    }
    i++;
  }

  if (cnt + 1 > k || v[i] > mij)
    return 0;
  else
    return 1;
}

int cautbin(int st, int dr, int n, int k) {
  int sol, mij;
  while (st <= dr) {
    mij = (st + dr) / 2;
    if (ok(mij, n, k) == 1) {
      dr = mij - 1;
      sol = mij;
    }
    else
      st = mij + 1;
  }
  return sol;
}

int main() {
  FILE *fin, *fout;
  int n, k, i;

  fin = fopen("transport.in", "r");
  fscanf(fin, "%d%d", &n, &k);
  for (i = 0; i < n; i++)
    fscanf(fin, "%d", &v[i]);
  fclose( fin );

  fout = fopen("transport.out", "w");
  fprintf(fout, "%d", cautbin(1, n * KMAX, n, k));
  fclose( fout );
  return 0;
}