Cod sursa(job #2891583)

Utilizator mateicalin2002Ceausu Matei Calin mateicalin2002 Data 19 aprilie 2022 02:14:36
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

#define NMAX 16005

long long n, k, v[NMAX], max_value = -1, sum;

long long check_truck(long long capacity)
{
	long long s = 0;
	long long i = 1;
	long long drums = 0;
	while (i <= n) {
		while (i <= n && s + v[i] <= capacity) {
			s += v[i];
			++i;
		}
		s = 0;
		++drums;
	}
	return drums;
}

long long binary_search()
{
    long long i, step;
    for (step = 1; step <= sum; step <<= 1);
    for (i = max_value; step; step >>= 1)
        if (i + step <= sum && check_truck(i + step) > k)
           i += step;
    return i + 1;
}

int main()
{
	ifstream fin("transport.in");
	ofstream fout("transport.out");
	fin >> n >> k;
	for (long long i = 1; i <= n; i++) {
		fin >> v[i];
		sum += v[i];
		if (max_value < v[i])
			max_value = v[i];
	}
	fout << binary_search() << '\n';
	fin.close();
	fout.close();
	return 0;
}