Cod sursa(job #1026837)

Utilizator hanganflorinHangan Florin hanganflorin Data 12 noiembrie 2013 02:10:29
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream is("transport.in");
ofstream os("transport.out");

void Read();
bool Ver(int x );

int n, a[16001], k, w, st, dr, m, nr;
char s[32010];

int main()
{
    Read();
    while ( st <= dr )
    {
        m = (st+dr)/2;
        if ( Ver(m) )
        {
            nr = m;
            dr = m-1;
        }
        else
            st = m+1;
    }
    os << nr;
    is.close();
    os.close();
    return 0;
}
void Read()
{
    is >> n >> k;
    is.get();
    is.getline(s, 32010, EOF );
    int l = strlen(s);
    for ( int i = 0; i < l; ++i )
    {
        if ( s[i] == '\n')
        {
            if ( a[w] > st )
                st = a[w];
            dr += a[w];
            w++;
        }
        else
            a[w] = a[w] * 10 + s[i] - 48;
    }
}
bool Ver(int x )
{
    int nr = 0;
    int sm = 0;
    for ( int i = 0; i < n; i++ )
        if ( sm + a[i] <= x )
        {
            sm += a[i];
            if ( i == n-1 )
                nr++;
        }
        else
        {
            sm = a[i];
            nr++;
            if ( i == n-1 )
                nr++;
        }
        if ( nr <= k )
            return true;
        return false;
}