Cod sursa(job #1581876)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 27 ianuarie 2016 11:43:28
Problema Transport Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>

int v[16100];
int n,k,max;

int verif(int vol){
    int i=0,nrt=0,s=0;

    for(i=0;i<n;i++){
        s+=v[i];
        if(s>vol){
            nrt++;
            s=v[i];
        }
    }

    if(s<vol){
        nrt++;
    }
    if(nrt==k){
        return 0;
        //perfect vis
    }else if(nrt>k){
        return 1;
        // nevoie volum mai mare
    }else{
        return -1;
        //scadere volum
    }
}

int main(){
    int i;
    int voln,t;
    int dr,st;

    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);

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

    for(i=0;i<n;i++){
        scanf("%d",&v[i]);
        if(v[i]>max){
            max=v[i];
        }
    }

    dr=n*max;
    st=max;
    while(dr-st>1){
        voln=(st+dr)/2;
        t=verif(voln);
        if(t==1){
            st=voln;
        }else if(t==-1){
            dr=voln;
        }else{
            dr--;
        }
    }
    printf("%d",dr);
    return 0;
}