Cod sursa(job #782978)

Utilizator AndreeaNNedelcu Andreea AndreeaN Data 1 septembrie 2012 13:30:57
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<stdio.h>
FILE *f=fopen("transport.in","r"),*g=fopen("transport.out","w");
long int n,k,v[16001],max=-1,s=0;

void citire(){
long int i;
	fscanf(f,"%ld %ld\n",&n,&k);
	for(i=1; i<=n; i++){
		fscanf(f,"%ld\n",&v[i]);
		if(v[i]>max){max=v[i];}
		s+=v[i];
	}
}

void cauta_binar(){
long int st,dr,mij=0,i,sum=0,nrp=0,rez;
	st=max; dr=s;
	while(st<=dr){
		mij=(st+dr)/2;
		sum=0; nrp=1;
		for(i=1; i<=n; i++){
			sum+=v[i];
			if(sum>mij){
				nrp++;
				sum=v[i];
			}
			if(nrp>k){
				st=mij+1;
				break;
			}
		}
		if(nrp<=k){
			rez=mij;
			dr=mij-1;
		}
	}
	fprintf(g,"%ld",rez);
}

int main(){
	citire();
	cauta_binar();

return 0;
}