Cod sursa(job #2149844)

Utilizator Teodor.mTeodor Marchitan Teodor.m Data 3 martie 2018 01:02:54
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;
 
ifstream in("transport.in");
ofstream out("transport.out");

const int MaxVolume = 16005 * 16005;

int main() {

	int n, k; in >> n >> k;

	vector< int > v(n);
	int maxVolMattress = 0;
	for(auto& it: v) {
		in >> it;
		maxVolMattress = max(maxVolMattress, it);
	}

	int lo = maxVolMattress, hi = MaxVolume;
	while(lo <= hi) {
		int mid = (lo + hi) >> 1;
		int sumLeft = mid - v[0];

		int countTransports = 0;
		for(int i = 1; i < n; ++i) {
			if(v[i] <= sumLeft) {
				sumLeft -= v[i];
			} else {
				countTransports++;
				sumLeft = mid - v[i];
			}
		}

		if(countTransports < k) {
			hi = mid - 1;
		} else {
			lo = mid + 1;
		}
	}

	out << lo << '\n';

	v.clear();
	
    in.close(); out.close();
 
    return 0;
}