Cod sursa(job #2144550)

Utilizator Teodor.mTeodor Marchitan Teodor.m Data 26 februarie 2018 19:55:56
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;
 
ifstream in("transport.in");
ofstream out("transport.out");

int main() {

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

	vector< int > v(n);
	int sum = 0;

	for(auto& it: v) {
		in >> it;
		sum += it;
	}
	int minSum = INT_MAX;

	if(*max_element(v.begin(), v.end()) >= (sum / k) + (sum % k)) {
		out << *max_element(v.begin(), v.end()) << '\n';
	} else {
		int aproxSum = (sum / k) + (sum % k);
		int currentSum = v[0];

		for(int i = 1; i < n; ++i) {
			while(currentSum + v[i] <= aproxSum && i < n) {
				currentSum += v[i];
				++i;
			}

			if(currentSum + v[i] > aproxSum && currentSum + v[i] < minSum) {
				minSum = currentSum + v[i];
				currentSum = v[i];
			} else {
				if(currentSum == aproxSum)
					minSum = aproxSum;
				currentSum = 0;
			}
			--i;
		}
	}

	out << minSum << '\n';

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