Cod sursa(job #2308295)

Utilizator lilianaursacheLiliana Ursache lilianaursache Data 26 decembrie 2018 19:54:09
Problema Transport Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
using namespace std;

ifstream f("transport.in"); ///kruskal
ofstream g("transport.out");
int n,k,v[16000],i,maxi;
long long sum;

long long nr_transp(long long c) {
    long long nt=0, i=1, cc=c;
    for (i=1; i<=n; )
        if (v[i]<=cc) cc-=v[i], i++;
        else nt++, cc=c;
    return nt+1;
}

long long cb() { ///capacitatea minima m pt a face maxim k transporturi
    long long s=maxi, d=sum, m, pos=1, nt;
    while(s<=d) {
        m = s +(d-s)/2;
        nt=nr_transp(m); /// nr transp la capacitatea m
        if (nt==k) pos=m, d = m-1;
        else if(nt>k) s=m+1;
        else d=m-1;
    }
    return pos;
}

int main()
{
    f>>n>>k;
    for (i=1; i<=n; i++) {
        f>>v[i];
        if (v[i]>maxi) maxi=v[i];
        sum+=v[i];
    }
    //g<<nr_transp(6);
    g<<cb();
    return 0;
}