Cod sursa(job #1522801)

Utilizator Nevermore10Macovei Cosmin Nevermore10 Data 11 noiembrie 2015 23:14:27
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
short n,k,v[16010];
int suma = 0;
short contor = 0;
int raspuns;

int verif(int mijl) {
  int i = 0,s=0;
  contor = 0;
  while(i < n) {
      s = 0;
      while(s <= mijl) {
        s += v[i];
        i++;
      }
      s -= v[i-1];
      i--;
      contor++;
      if(contor > k) {
        return 0;
      }
  }
  if(contor == k) {
    return 1;
  }

}

int cautare(int inceput, int sfarsit) {
    int mijl = (inceput + sfarsit) / 2;
    if(mijl == inceput || sfarsit <= inceput) {
      return 0;
    }


    if(verif(mijl)) {
      raspuns = mijl;
      cautare(inceput,mijl);
    }
    else if(contor > k) {
        cautare(mijl,sfarsit);
    }
    else {
        cautare(inceput,mijl);
    }
}

int main() {
  f >> n >> k;
  int max = 0;
  for(int i = 0; i < n; i++) {
      f >> v[i];
      if(max < v[i]) {
        max = v[i];
      }
      suma += v[i];
  }
  if(verif(max)) {
    g << max;
  }
  else{
  cautare(max,suma);
  g << raspuns;
  }
}