Cod sursa(job #1033865)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 17 noiembrie 2013 16:00:05
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<fstream>
#define dim 16007
using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");
int n,k,maxim,a[dim],i,dr;
long long mid,sum,li,ls,sol;
long long ok(long long cap){
	long long drum=0;
	long long s=0;
	for(int  i=1;i<=n;++i){
		if(a[i]+s<=cap){
			s+=a[i];
		}
		else{
			++drum;
			s=a[i];
		}
	}
	return ++drum;
}	
int main () {
	
	f>>n>>k;
	
	
	for(i=1;i<=n;++i){
		f>>a[i];
		sum+=a[i];
		if(a[i]>maxim)
			maxim=a[i];
	}
	li=maxim;
	ls=sum;
	
	while(li<=ls){
		mid=li+(ls-li)/2;
		dr=ok(mid);
		if(dr<=k){
			sol=mid;
			ls=mid-1;
		}
		else{
			li=mid+1;
		}
		
	}
	g<<sol<<"\n";
	return 0;
}