Cod sursa(job #2392925)

Utilizator noperestayadelin mihoc noperestay Data 30 martie 2019 17:04:24
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <cstring>
#include <algorithm>
#include <fstream>

using namespace std;

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

int n, stiva[2000001], suma, k;

int verificaTransport(int cantitateMaxima) {
	int numarTransporturi = 1, incarcatura = 0;
	for (int i = 1; i <= n; i++) {
		incarcatura += stiva[i];
		if (incarcatura > cantitateMaxima) {
			numarTransporturi++;
			incarcatura = stiva[i];
		}
	}
	return numarTransporturi;
}

void cautareBinara() {
	int numarTransporturi, maxim;

	for (int i = 1; i <= n; i++) {
		suma += stiva[i];
		maxim = max(maxim, stiva[i]);
	}

	int stanga = maxim, dreapta = suma;
	while (stanga <= dreapta) {
		int mijloc = (stanga + dreapta) / 2;
		if (verificaTransport(mijloc) > k)
			stanga = mijloc + 1;
		else {
			dreapta = mijloc - 1;
			numarTransporturi = mijloc;
		}
	}

	cout << numarTransporturi << "\n";
}


int main() {

	f >> n >> k;
	for (int i = 1; i <= n; i++)
		f >> stiva[i];

	cautareBinara();

	return 0;
}