Cod sursa(job #979837)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 2 august 2013 22:04:44
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
#include <fstream>

using namespace std;

#define Nmax 16005

int v[Nmax];
int N, K, S, MAX;

bool valid( int cap )
{
    /*int transport = 0;

    for ( int i = 1; i <= N; )
    {
        transport++;

        int j = i, s = 0;

        while( s+v[j] <= cap && j <= N )
                s += v[j],
                j++;

        i = j;
    }

    return ( transport <= K );*/

    if ( S <= K*cap )
            return 1;
    else
            return 0;
}

void read()
{
    ifstream f("transport.in");

    f >> N >> K;

    string FileData( ( istreambuf_iterator<char>(f)), istreambuf_iterator<char>() );

    int l = FileData.length();
    int nr = 0, ind = 1;

    for ( int i = 1; i < l; ++i )
            if ( isdigit( FileData[i] ) )
                    nr = nr * 10 + ( FileData[i] - 48 );
            else
            {
                v[ ind++ ] = nr;
                MAX = max( MAX, nr );
                S += nr;
                nr = 0;
            }

    f.close();
}

int cautare_binara( int st, int dr )
{
    int m;

    while( dr - st > 1 )
    {
        m = st + ( dr - st ) / 2;

        if ( valid(m) )
            dr = m;
        else
            st = m + 1;
    }

    if ( valid(st) )
            return st;

    if ( valid(dr) )
            return dr;

    return -1;
}

void print()
{
    ofstream g("transport.out");

    g << cautare_binara( MAX, S ) << "\n";

    g.close();
}

int main()
{
    read();
    print();

    return 0;
}