Cod sursa(job #483859)

Utilizator CS-meStanca Marian Ciprian CS-me Data 10 septembrie 2010 14:56:29
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
FILE *fin, *fout;
int n,k,i,m,v[16001],p,nr,s,min,a,b,max;

int main(){

    fin=fopen("transport.in","r");
    fout=fopen("transport.out","w");

    fscanf(fin,"%d %d",&n,&k);
	max=0;
    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&v[i]);
        b+=v[i];
	if(v[i]>max){
		max=v[i];
	}
    }
    /*if(b%k==0){
        a=b/k;
    }
    else{
        a=b/k+1;
    }
*/
a=max;

    while(a<=b){
        m=(a+b)/2;
        nr=0;
        s=0;
        for(i=1;i<=n && nr<k;i++){
            if(s+v[i]<=m){
			 s+=v[i];
		  }
            else{
			 s=v[i];
                nr++;
            }
        }
	   if(s>0){
            nr++;
            s=0;
        }
	   if(nr<=k){
		  min=m;
		  b=m-1;
        }
	   else{
            a=m+1;
        }
    }

    fprintf(fout,"%d",min);


return 0;
}