Cod sursa(job #1498703)

Utilizator ruxi.icleanuRuxandra Icleanu ruxi.icleanu Data 8 octombrie 2015 22:51:22
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 16000

int v[MAXN];

int n, k;

inline int inc_camion(int c) {
    int i=0, s=0, nr_trans=0;
    while(i<n) {
        s+=v[i];
        if(s>c) {
            nr_trans++;
            s=v[i];
        }
        i++;
    }
    if(s>0)
        nr_trans++;
    return nr_trans;
}

int cautare_binara(int st,int dr) {
    int mij, x, a;
    while(st<=dr) {
        mij=(st+dr)/2;
        x=inc_camion(mij);
        if(x>k)
            st=mij+1;
        else {
            dr=mij-1;
            a=mij;
        }
    }
    return a;
}

int main()
{
    int s, max, i;
    FILE *fi, *fo;
    fi = fopen("transport.in", "r");
    fo = fopen("transport.out", "w");
    fscanf(fi, "%d%d", &n, &k);
    s=0;
    max=1;
    for(i=0; i<n; i++) {
        fscanf(fi, "%d", &v[i]);
        s+=v[i];
        if(v[i]>max)
            max=v[i];
    }
    fprintf(fo, "%d", cautare_binara(max, s));
    fclose(fi);
    fclose(fo);
    return 0;
}