Cod sursa(job #3186608)

Utilizator aeandreescuAndreescu Ana-Eliza aeandreescu Data 23 decembrie 2023 21:54:47
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>

using namespace std;

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

const int nmax= 16000;
const int pmax= 134217728;
const int dmax= 8192;

int v[nmax+2];

int check( int x, int n ) {
    int sol= 0;
    for ( int i= 1; i<=n; ++i, ++sol ) {
        for ( int step= pmax, last= i; step>0; step/= 2 ) {
            if ( i+step<=n && v[last]-v[i+step+1]<=x ) {
                i+= step;
            }
        }
    }

    return sol;
}

int main() {
    int n, k, maxim= 0;
    fin>>n>>k;
    for ( int i= 1; i<=n; ++i ) {
        fin>>v[i];
        maxim= max(maxim, v[i]);
    }
    for ( int i= n-1; i>=1; --i ) {
        v[i]+= v[i+1];
    }

    int sol= v[1];
    for ( int step= pmax; step>0; step/= 2 ) {
        if ( sol-step>=maxim && check(sol-step, n)<=k ) {
            sol-= step;
        }
    }

    fout<<sol<<"\n";

    return 0;
}