Cod sursa(job #2078958)

Utilizator xkz01X.K.Z. xkz01 Data 30 noiembrie 2017 12:41:29
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
using namespace std;
int main(){
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int i, n, k, valMax=-1, sumElem=0, a[16002];
    scanf("%d%d", &n, &k);
    for (i=1;i<=n;i++) {scanf("%d", &a[i]); if (valMax<a[i]) valMax=a[i]; sumElem+=a[i];}
    int st=valMax, dr=sumElem, mij, sol=-1, nrTrans, valCrt;
    bool posibil;
    while (st<=dr) {
        mij=st+(dr-st)/2;
        nrTrans=0; valCrt=0; posibil=true;
        for (i=1;i<=n;i++) {
            if (valCrt+a[i]<=mij) valCrt+=a[i]; else {
                valCrt=a[i]; nrTrans++;
                if (nrTrans>k) {posibil=false; break;}
            }
        }
        if ((nrTrans==k)&&(valCrt>0)) posibil=false;
        if (posibil) {sol=mij; dr=mij-1;} else st=mij+1;
    }
    if (sol<0) return 31337;
    printf("%d\n", sol);
    return 0;
}