Cod sursa(job #1571615)

Utilizator BrandonChris Luntraru Brandon Data 18 ianuarie 2016 11:07:50
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int v[16005];
int maxx, st, dr, ans, n, k, sum;
inline void read()
{
    in >> n >> k;
    for(int i = 1; i <= n; ++i)
    {
        in >> v[i];
        sum += v[i];
        if(v[i] > maxx)
        {
            maxx = v[i];
        }
    }
    st = maxx;
    dr = sum;
}
bool fit(int sz)
{
    int count_truck = 0;
    int sum = 0;
    for(int i = 1; i <= n; ++i)
    {
        if(sum+v[i] <= sz)
        {
            sum += v[i];
        }
        else
        {
            sum = v[i];
            ++count_truck;
        }
    }
    return (count_truck < k);
}
void solve()
{
    while(st <= dr)
    {
        int med = (st + dr)/2;
        if(fit(med) == true)
        {
            dr = med - 1;
            ans = med;
        }
        else
        {
            st = med+1;
            //ans = med;
        }
    }
}
inline void print()
{
    out << ans;
}
int main()
{
    read();
    solve();
    print();
    return 0;
}