Cod sursa(job #526414)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 28 ianuarie 2011 11:57:42
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<iostream>
#include<fstream>
using namespace std;

ifstream aa("transport.in");
ofstream ss("transport.out");
int sum,n,k,i,j,pas,x[16001],smax,ssmax;
bool test(int y);
int caut();

int main() {
	aa >> n >> k;
	for (i=1;i<=n;++i) {
		aa >> x[i];
		sum+=x[i];
		if (x[i]>smax) smax=x[i];
	}
	ss << caut();
	aa.close();
	ss.close();
	return 0; 
}

int caut() {
	int j,pas=1<<28;
	while (pas<=sum-smax) pas*=2;
	pas/=2;
	for (j=0;pas!=0;pas/=2) {
		if (!test(j+pas)) 
			j+=pas;
	}
	return 1+j;
}
bool test(int y) {
	int nr=1,cap=0;
	for (int i=1;i<=n;++i) {
		if(x[i]>y)
			return false;
		if (cap+x[i]>y) {
			cap=0;
			++nr;
		}
		cap+=x[i];
		if(nr>k)
			return false;
	}
	return true;
}