Cod sursa(job #1026826)

Utilizator hanganflorinHangan Florin hanganflorin Data 12 noiembrie 2013 00:50:22
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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 = 1;
    int sm = a[0];
    for ( int i = 1; i < w+1; ++i )
    {
        if ( sm + a[i] <= m )
            sm += a[i];
        else
        {
            sm = a[i];
            nr++;
        }

    }
    if ( nr <= k )
        return true;
    return false;
}