Cod sursa(job #799582)

Utilizator tannous.marcTannous Marc tannous.marc Data 19 octombrie 2012 14:43:31
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<iostream>
#include<fstream>
using namespace std;

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

int main() {
	in>>n;
	in>>k;
	for (i=1;i<=n;++i) {
		in>> x[i];
		sum+=x[i];
		if (x[i]>smax) smax=x[i];
	}
	out<< caut();
	in.close();
	out.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;
}