Cod sursa(job #2890545)

Utilizator TeddyDinutaDinuta Eduard Stefan TeddyDinuta Data 15 aprilie 2022 22:08:58
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n, k, step, Max, v[17005], i, Min, sum;

bool check(int x)
{
    int cnt = 0, cr = 0;
    for (int i = 1; i <= n; i++) {
        if (cr + v[i] > x) {
            cnt++;
            cr = v[i];
        }
        else
            cr += v[i];
    }
    if (cr > 0)
        cnt++;
    return cnt <= k;
}

int main()
{
  in>>n>>k;
  for (int i = 1; i <= n; i++) {
    in>>v[i];
    Max = max(Max, v[i]);
    sum += v[i];
  }

  for(step = 1; step <= sum; step <<= 1);

  for (i = Max - 1; step; step >>= 1)
    if (check(i + step) == 0 && i + step <= sum) {
        i += step;
    }

  out<<i + 1;
}