Cod sursa(job #1584865)

Utilizator dsergiu05Sergiu Druga dsergiu05 Data 30 ianuarie 2016 15:47:11
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

const int nmax=16000;
int v[nmax+1];

int n;

int drumuri(int x) {
    int sol=0,a=x;
    for (int i=1; i<=n; i++) {
        if (v[i]<=x-a) {
            a=a+v[i];
        } else {
            sol++;
            a=v[i];
        }
    }
    return sol;
}

int main () {
    int m;
    fin>>n>>m;

     for (int i=1; i<=n; i++) {
        fin>>v[i];
    }

    int b=0,s=0;
    for (int i=1; i<=n; i++) {
        s=s+v[i];
        if (v[i]>b) {
            b=v[i];
        }
    }

    int n2,sol=s;
    for (n2=1; n2<=s; n2*=2) {
    }
    n2/=2;

    for (int step=n2; step>=1; step/=2) {
        if (sol-step>=b && drumuri(sol-step)<=m) {
            sol-=step;
        }
    }

    fout<<sol<<"\n";

    return 0;
}