Cod sursa(job #521537)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 12 ianuarie 2011 19:30:06
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>

#define file_in "transport.in"
#define file_out "trnsport.out"

int n,k,i,sum,suma,ls,ld,mij,v[16010],nr,sol;

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	sum=0;
	scanf("%d %d", &n, &k);
	for (i=1;i<=n;++i){
		 scanf("%d", &v[i]);
		 sum+=v[i];
	}
	
	ls=1;
	ld=sum;
	
	while(ls<=ld){
		mij=(ls+ld)>>1;
		
		nr=0;
		suma=mij+1;
		for (i=1;i<=n;++i){
			if (v[i]>mij){
				nr=16001;
			    break;
			}
			if (suma+v[i]<=mij){
				//nr++;
				suma+=v[i];
			}
			else{
				nr++;
				suma=v[i];
			}
		}
		if (nr<=k){
			sol=mij;
			ld=mij-1;
		}
		else
			ls=mij+1;
	}
	
	printf("%d", sol);
	
	return 0;
	
}