Cod sursa(job #1921941)

Utilizator SenibelanMales Sebastian Senibelan Data 10 martie 2017 15:26:23
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;

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

int N, K, sum, maxim = 0;
vector <int> v;

void Read(){
  int nr;
  in >> N >> K;
  for(int i = 1; i <= N; ++i){
    in >> nr;
    sum += nr;
    if(nr > maxim)
      maxim = nr;
    v.push_back(nr);
  }
}

bool Works(int n){
  int transport_curent = v[0], i = 1;
  int transport = 0;
  int s = v.size();
  for(int i = 0; i < s; ++i){
    if(transport_curent + v[i] > n || i == s - 1){
      transport++;
      transport_curent = v[i];
    }
    else
      transport_curent += v[i];
  }
  if(transport <= K)
    return 1;
  return 0;
}


void BinarySearch(){
  int left = maxim, right = sum;
  int mid, sol = sum;
  while(left <= right){
    mid = (left + right) / 2;
    if(Works(mid)){
      sol = mid;
      right = mid - 1;
    }
    else
      left = mid + 1;
  }
  out << sol << "\n";
}

int main(){
  Read();
  BinarySearch();
  return 0;
}