Cod sursa(job #686809)

Utilizator hcalinHrih Calin hcalin Data 21 februarie 2012 21:14:59
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
using namespace std;


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

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){
			transp++;
			sum=a[i];
			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)&&(logic!=1)){
		mj=(st+dr)/2;
		if(merge(mj)!=0){
			dr=mj-1;
		if(ult==1){
				logic=1;
				sol=mj;
			}
		}
			else{
				st=mj+1;
				ult=1;
			}
	}
	while(merge(sol)!=0)
		sol--;
	sol++;
			printf("%lld",sol);
}