Cod sursa(job #2484361)

Utilizator alexnigaNiga Alexandru alexniga Data 31 octombrie 2019 00:26:09
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");

int canHandleInK(long long mij, int k, vector <int>&v, int n)
{
    int countTrucks = 0, localk = mij;
    for (int i = 1; i <= n; i++)
    {
        if (localk - v[i] < 0)
        {
            countTrucks++;
            localk = mij;

        }
        localk -= v[i];
    }
    countTrucks += 1;
   //cout << mij << " " << countTrucks << "\n";
    if (countTrucks <= k)
        return 1;
    return 0;
}

int BinarySearch(int st, long long dr, int k, vector <int>&v, int n)
{
    int ans = -1;

    while (st <= dr)
    {
        long long mij = (st + dr) / 2;

        if (canHandleInK(mij, k, v, n))
        {
            ans = mij;
            dr = mij - 1;
        }
        else
        {
            st = mij + 1;
        }
    }

    return ans;

}

int main()
{
    int n, maxVal = -1, k;

    f >> n >> k;

    vector <int> v(n + 1);

    for (int i = 1; i <= n; i++)
        {
            f >> v[i];
            maxVal = max(maxVal, v[i]);
        }

    g << BinarySearch(maxVal, 256000001, k, v, n);
    return 0;
}