Cod sursa(job #2340487)

Utilizator skoda888Alexandru Robert skoda888 Data 10 februarie 2019 15:12:47
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb


#include <iostream>
#include <fstream>


const int TRANSPMAX = 256000005;
const int NMAX = 16005;


int Stiva[NMAX];


bool Incape(int C, int K, int N) {

	int Camion = C;
	int countR = 1;
	for (int i = 1; i <= N; ++i) {
		if (countR > K) {
			return false;
		}

		if (Stiva[i] > Camion) {
			Camion = C;
			++countR;
			--i;
		}
		else {
			Camion -= Stiva[i];
		}

	}

	return (countR <= K);
}


int cautare_binara(int N, int K) {

	int stanga = 1;
	int dreapta = TRANSPMAX;
	int cap_min = dreapta;
	while (dreapta >= stanga) {

		int mijloc = (dreapta + stanga) / 2;

		if (Incape(mijloc, K, N)) {
			dreapta = mijloc - 1;
			cap_min = mijloc;
		}
		else {
			stanga = mijloc + 1;
		}

	}

	return cap_min;
}



int main() {

	std::ifstream in("transport.in");
	std::ofstream out("transport.out");


	int N, K;
	in >> N >> K;

	for (int i = 1; i <= N; ++i) {
		in >> Stiva[i];
	}


	out << cautare_binara(N, K);

	system("PAUSE");
	return 0;
}