Cod sursa(job #681494)

Utilizator hcalinHrih Calin hcalin Data 17 februarie 2012 11:12:11
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
using namespace std;


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

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




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