Cod sursa(job #648948)

Utilizator SteveStefan Eniceicu Steve Data 14 decembrie 2011 20:54:32
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

short N, K, i, j, v[16010];
int S = 0;

void Citire ()
{
    ifstream fin ("transport.in");
    fin >> N >> K;
    for (i = 0; i < N; i++)
    {
        fin >> v[i];
        S += v[i];
    }
    fin.close ();
}

int Business (int numar)
{
    short ordin = 0;
    int cate = 0;
    for (j = 0; j < N; j++)
    {
        if (v[j] > numar) return 0;
        cate += v[j];
        if (cate > numar)
        {
            ordin++;
            cate = v[j];
        }
        if (ordin >= K) return 0;
    }
    return 1;
}

int Binary_Search ()
{
    int step;
    int index;
    for (step = 1; step < S; step <<= 1);
    for (index = step; step; step >>= 1)
    {
        if (Business (index - step)) index -= step;
    }
    return index;
}

void Scriere ()
{
    ofstream fout ("transport.out");
    S= Binary_Search ();
    fout << S;
    fout.close ();
}

int main ()
{
    Citire ();
    Scriere ();
    return 0;
}