Cod sursa(job #718180)

Utilizator PVladPurcarea Vlad PVlad Data 20 martie 2012 16:41:56
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>
int v[16001],n,k;
int ok(int x){
	int c=0,s=0,i;
	for(i=1;i<=n;i++){
		if(v[i]>x){
			return 0;
		}
		if(s+v[i]>x){
			s=v[i];
			++c;
			continue;
		}
		s+=v[i];
	}
	s+=v[n];
	if(s>x){
		++c;
	}
	if(c>k){
		return 0;
	}
	return 1;
}
int bs(int st, long long dr){
	int med,last;
	while(st<=dr){
		med=st+((dr-st)>>1);
		if(ok(med)==1){
			last=med;
			dr=med-1;
		}
		else{
			st=med+1;
		}
	}
	return last;
}
int main(){
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	int i;
	long long s;
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++){
		scanf("%d",&v[i]);
		s+=v[i];
	}
	printf("%d\n",bs(1,s));
	return 0;
}