Cod sursa(job #727147)

Utilizator NikitaUtiuNichita Utiu NikitaUtiu Data 27 martie 2012 19:26:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <fstream>
using namespace std;

int n, k;
int a[16000];

bool ok(int cap) {
	int c = 0;
	for(int i = 0; i < n; ++i) {
		if(a[i] > cap)
			return true;
		int sum = a[i];
		while(i < n - 1 && sum + a[i + 1] <= cap)
			sum += a[++i];
		if(++c > k)
			return true;
	}
	return false;
}

int main(void) {
	ifstream fin("transport.in");
	fin >> n >> k;
	int s = 0;
	for(int i = 0; i < n; ++i) {
		fin >> a[i]; s += a[i];
	}
	fin.close();
	
	int step, cap;
	for(step = 1; step < s; step <<= 1) {}
	for(cap = -1; step != 0; step >>= 1)
		if(cap + step < s && ok(cap + step))
			cap += step;
	
	ofstream fout("transport.out");
	fout << cap + 1;
	fout.close();
}