Cod sursa(job #1786656)

Utilizator c0mradec0mrade c0mrade Data 23 octombrie 2016 14:08:20
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<bits/stdc++.h>
using namespace std;

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

int n, k, mx, v[16001];

bool Find(int x)
{
    int ans = 0;
    int nr = 1;

    for(int i = 1; i <= n; ++i)
    {
        if(ans + v[i] <= x)
        {
            ans += v[i];
        }
        else
        {
            ans = v[i];
            ++nr;
        }

        if(nr > k)
            return 0;
    }

    return 1;

}

int main()
{
    fin >> n >> k;
    for(int i = 1; i <= n; ++i)
    {
        fin >> v[i];
        mx = max(mx, v[i]);
    }

    int left = mx;
    int right = 256000000;

    while(left <= right)
    {
        int mid = (left + right) >> 1;
        if(Find(mid))
        {
            right = mid - 1;
        }
        else
        {
            left = mid + 1;
        }
    }

    if(Find(right) && right >= mx)
        fout << right;
    else
        fout << left;

    return 0;
}