Cod sursa(job #816238)

Utilizator TheShadowsAlexandru Cristian TheShadows Data 17 noiembrie 2012 12:24:40
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>
using namespace std;
int v[16005], k, n;
int getTransports(int maxc){
    int vol=0, ts=1;
    for(int i=1; i<=n; ++i){
        if(vol+v[i]>maxc){
            ++ts; vol=0;
        }
        vol+=v[i];
    }
    return ts;
}
int searchForSolution(int hi, int lo){
    int med = (hi+lo)/2, transp=getTransports(med);
    if(hi==lo)
        return lo;
    if(transp>k)
        return searchForSolution(hi, med+1);
    else return searchForSolution(med, lo);
}
int main()
{
    FILE *in=fopen("transport.in","r"), *out=fopen("transport.out","w");
    int hi, lo=0;
    fscanf(in, "%d %d\n", &n, &k);
    for(int i=1; i<=n; ++i){
        fscanf(in, "%d", &v[i]);
        if(v[i]>lo) lo = v[i];
        hi+=v[i];
    }
    fprintf(out, "%d\n", searchForSolution(hi, lo));
    return 0;
}