Cod sursa(job #739856)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 23 aprilie 2012 23:16:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>

const int N_MAX=16000;

int n;
int v[N_MAX+1];

int fct(int x){
    int nrt, cap;

    nrt=1;
    cap=x;
    for (int i=1; i<=n; ++i){
        if (v[i]>cap){
            ++nrt;
            cap=x;
        }
        cap-=v[i];
    }

    return nrt;
}

int main(){
    int k, sol, auxbs, vmax, vsum;

    freopen("transport.in", "r", stdin);
    scanf(" %d %d ", &n, &k);
    vmax=0;
    vsum=0;
    for (int i=1; i<=n;++i){
        scanf(" %d ", &v[i]);
        if (v[i]>vmax){
            vmax=v[i];
        }
        vsum+=v[i];
    }
    fclose(stdin);

    for (auxbs=1; auxbs<vsum; auxbs*=2){
    }
    sol=vsum;
    for (; auxbs; auxbs/=2){
        if (sol-auxbs>=vmax && fct(sol-auxbs)<=k){
            sol-=auxbs;
        }
    }

    freopen("transport.out","w",stdout);
    printf("%d\n", sol);
    fclose(stdout);

    return 0;
}