Cod sursa(job #2725221)

Utilizator Mihai_PredaPreda Mihai Dragos Mihai_Preda Data 18 martie 2021 16:09:15
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <stdio.h>
#define NMAX 16000
using namespace std;
int n, k, v[NMAX + 1];
FILE *fin = fopen ("transport.in","r");
FILE *fout = fopen ("transport.out", "w");

bool verif (int a){
  int s = 0;
  int cnt = 1;
  for (int i = 0; i < n; i++){
    if (s + v[i] <= a)
      s += v[i];
    else{
      cnt ++;
      if (a >= v[i])
        s = v[i];
      else
        return 0;
    }
  }
  if (cnt <= k)
    return 1;
  return 0;
}

int main(){
  fscanf (fin, "%d%d", &n, &k);

  for (int i = 0; i < n; i++){
    fscanf (fin, "%d", &v[i]);
  }
  int st = 1;
  int dr = n * NMAX;
  int mid;
  int rez;
  while (st <= dr){
    mid = (st + dr) / 2;
    if (verif (mid) == 0)
      st = mid + 1;
    else {
      dr = mid - 1;
      rez = mid;
    }
  }
  fprintf (fout, "%d", rez);
  return 0;
}