Cod sursa(job #2891582)

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

using namespace std;

#define NMAX 16005

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

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

int binary_search()
{
    int 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 (int 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;
}