Cod sursa(job #1785229)

Utilizator SenibelanMales Sebastian Senibelan Data 20 octombrie 2016 22:58:21
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

int n, k, v[16005], maxi = -1, suma = 0;

void Read(){
  in >> n >> k;
  for(int i = 0; i < n; ++i){
    in >> v[i];
    if(maxi < v[i])
      maxi = v[i];
    suma += v[i];
  }
}

int works(int pos){
  int total = 1, current = 0;
  for(int i = 0; i < n; ++i){
    if(current + v[i] > pos && current == 0)
      return 0;
    else if(current + v[i] > pos){
      total++;
      current = 0;
      current += v[i];
    }
    else
      current += v[i];
  }
  if(total > k)
    return 0;
  else
    return total;
}

int BinarySearch(){
  int left = maxi, right = suma, mid, sol = 16002;
  while(left <= right){
    mid = (left + right) / 2;
    if(works(mid) < sol && works(mid) != 0){ 
      sol = mid;
      right = mid - 1;
    }
    else
      left = mid + 1;
  }
  return sol;
}

int main(){
  Read();
  out << BinarySearch() << "\n";
  return 0;
}