Cod sursa(job #1027388)

Utilizator hanganflorinHangan Florin hanganflorin Data 12 noiembrie 2013 18:58:39
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 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[16002], k, st, dr, m, nr;
char s[32020];

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;
    for ( int i = 1; i <= n; ++i )
    {
        is >> a[i];
        if ( a[i] > st )
            st = a[i];
        dr += a[i];
    }
}
bool Ver(int x )
{
    int nr = 0;
    int sm = 0;
    for ( int i = 1; 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;
}