Cod sursa(job #491955)

Utilizator cristian9Cristian Zloteanu cristian9 Data 12 octombrie 2010 22:41:56
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
int main(){
	freopen ("transport.in", "r", stdin);
	freopen ("transport.out", "w", stdout);

	int n, i, k, v[16001], min, max, s, c;

	scanf("%d %d ", &n, &k);

	for(i=1; i<=n; i++)
		scanf("%d ", &v[i]);

    min=1; max=16000;
	while(min <=max){
        c=(min+max)/2;
	    s=0;
	    int t=0;
	    for(i=1; i<=n; i++){
	        s+=v[i];
	        if(s>c){
	            t++;
	            s=v[i];
	        }
	    }
	    if(s>0 && s<=c)
            t++;
        if(t==k){
            printf("%d ", c);
            return 0;
        }
        if(t==0)
            max=c-1;
        else
            if(t>k)
            min=c+1;
            else
              max=c;
	}

	return 0;
}


/*#include <stdio.h>
 max=c-1;
int n,k,i,v[16010];
long min,max,s=0,nr,suma,si,nrj,sol;

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++){
		scanf("%d",&v[i]);
		if(v[i]>s){
			s=v[i];
		}
		max+=v[i];
	}
	min=s;
	while(min<=max){
		nr=(min+max)/2;
		nrj=nr;
		si=0;
		i=1;
		while(i<=n){
			si++;
			while(i<=n && v[i]<=nrj){
				nrj-=v[i];
				i++;
			}
			nrj=nr;
		}
		if(si<=k){
			max=nr-1;
			sol=nr;
		}else{
			min=nr+1;
		}
		//printf("%d\n\n",nr);
	}
	printf("%ld",sol);
	return 0;
}


*/