Cod sursa(job #703659)

Utilizator hcalinHrih Calin hcalin Data 2 martie 2012 13:30:47
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>
using namespace std;


long long dr=2000000000ll,st=1,mj,sol,n,k,logic=0,a[16005],ult,i,x;

bool merge(int c){
	long long sum=0;long long transp=1;
	int i;
	for(i=1;i<=n;i++){
		if(sum+a[i]>c){
			if(a[i] > c) return false;
			sum=a[i];
			transp++;
			if(transp>k)
				return false;
		}
		else
			sum+=a[i];
	}
		return (transp<=k);
};


int main(){
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%lld",&n);
	scanf("%lld",&k);
	
	for(i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	//merge(7);
	while((st<=dr)){
		mj=(st+dr)/2;
		if(merge(mj)){
			sol = mj;
			dr = mj - 1;
		}
		else
			st = mj + 1;
	}
			printf("%lld",sol);
}