Cod sursa(job #3179865)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 4 decembrie 2023 13:20:56
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <iostream>
#include <fstream>
#include <stdint.h>

const uint32_t MAX_N = 16000;
const uint32_t MAX_C_POW_2 = 268435456;

uint32_t v[MAX_N], n, k;

uint32_t GetTransports(uint32_t n, uint32_t c) {
	uint32_t sum = 0, nr = 1;
	for(uint32_t i = 0; i != n; ++i) {
		if(sum + v[i] > c) {
			++nr;
			sum = v[i];
		} else 
			sum += v[i];
	}

	return nr;
}

int main() {
	std::ifstream fin("transport.in");
	std::ofstream fout("transport.out");

	fin >> n >> k;

	for(uint32_t i = 0; i != n; ++i)
		fin >> v[i];
	
	uint32_t c = MAX_C_POW_2;
	for(uint32_t step = MAX_C_POW_2 >> 1; step; step >>= 1)
		if(GetTransports(n, c - step) <= k)
			c -= step;
	
	fout << c;

	fin.close();
	fout.close();

	return 0;
}