Cod sursa(job #155867)

Utilizator scvalexAlexandru Scvortov scvalex Data 12 martie 2008 11:04:48
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>

using namespace std;

int N, K,
	s[16001];

long long cate_drumuri(long long cap) {
	int left = cap;
	int count(1);
	for (int i(0); i < N; ++i) {
		left -= s[i];
		if (left < 0) {
			left = cap - s[i];
			if (left < 0)
				return (long long)16000*16000;
			++count;
		}
	}
	return count;
}
	
int main(int argc, char *argv[]) {
	FILE *fi = fopen("transport.in", "r");
	fscanf(fi, "%d %d", &N, &K);
	for (int i(0); i < N; ++i)
		fscanf(fi, "%d", &s[i]);
	fclose(fi);
	
	long long l = 1,
		u = (long long)16000 * 160000;
	while (l < u) {
		int q = (l + u) / 2;
		int aux = cate_drumuri(q);
		//cout << q << ": " << aux << endl;
		if (aux <= K)
			u = q;
		else
			l = q + 1;
	}
	
	ofstream fout("transport.out");
	fout << l << endl;
	fout.close();
	
	return 0;
}