Cod sursa(job #1075127)

Utilizator PsychoAlexAlexandru Buicescu PsychoAlex Data 8 ianuarie 2014 17:28:54
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>

std::ifstream fin("transport.in");
std::ofstream fout("transport.out");

int vec[16001], n, k;
int max1, sum;

void citire()
{
    fin>>n>>k;
    for(int i = 0; i< n; i++)
    {
        fin>>vec[i];
        sum += vec[i];
        if(max1 < vec[i])
        {
            max1 = vec[i];
        }
    }
}

bool check(int cap)
{
    int dr = 1, sal = 0;

    for(int i = 0; i < n; i++)
    {
        if(vec[i] + sal <= cap)
        {
            sal += vec[i];
        }
        else
        {
            dr++;
            if(dr > k)
            {
                return false;
            }
            i--;
            sal = 0;
        }
    }
    if(dr <= k)
    {
        return true;
    }
    return false;
}

int cautare(int st,int dr)
{
    if(st > dr)
    {
        return st;
    }

    int mij = (st + dr) / 2;

    if(check(mij))
    {
        return cautare(st, mij - 1);
    }
    else
    {
        return cautare(mij + 1,dr);
    }
}

void rezolvare()
{
//    std::cout<<cautare(max1, sum);
    fout<<cautare(max1, sum);
}

int main()
{
    citire();
    rezolvare();
    return 0;
}