Cod sursa(job #1007956)

Utilizator Athena99Anghel Anca Athena99 Data 9 octombrie 2013 22:00:41
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;

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

const int nmax= 16000;

int n, k;
int v[nmax+1];

int mx= 0, ts= 0;

int check(int s)
{
    int i= 1, d= 0;
    while ( i<=n ) {
        int aux= 0;
        while ( aux<=s ) {
            aux+= v[i];
            ++i;
        }
        aux-=v[--i];
        
        ++d;
    }

    return d;
}

int bs(  )
{
    int i, step, sol= ts;
    for ( step= 1; step<=ts; step*=2 );

    for ( i= ts; step; step/=2 ) {
        if ( i-step>=mx && check(i-step)<=k ) {
            sol= i-step;
            i-= step; 
        }
    }

    return sol;
}

int main( )
{
    fin>>n>>k;
    for ( int i= 1; i<=n; ++i ) {
        fin>>v[i];
        if ( v[i]>mx ) {
            mx= v[i];
        }
        ts+= v[i];
    }

    int sol= bs();
    fout<<sol<<"\n";

    return 0;
}