Cod sursa(job #2384280)

Utilizator stoicaandreiStoica Marius-Andrei stoicaandrei Data 20 martie 2019 16:26:07
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 16003;

int n, k;
int a[N_MAX];
int st, dr = (1 << 30);
int result;

void read()
{
  fin >> n >> k;
  for (int i = 0; i < n; i ++)
  {
    fin >> a[i];
    if (a[i] > st)
      st = a[i];
  }
}

void solve()
{
  while (dr >= st)
  {
    int mij = (dr + st) / 2;
    int steps = 1;
    int sum = 0;

    for (int i = 0; i < n; i ++)
      if (sum + a[i] > mij)
      {
        steps ++;
        sum = a[i];
      } else sum += a[i];

    if (steps > k)
      st = mij + 1;
    else
    {
      result = mij;
      dr = mij - 1;
    }
  }
}

int main() {
  read();
  solve();
  fout << result;
}