Cod sursa(job #2625883)

Utilizator andrei-cosmin.bujorBujor Andrei-Cosmin andrei-cosmin.bujor Data 6 iunie 2020 10:40:01
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <iostream>

using namespace std;

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

int saltele[16000];
int n, k;

int check(int si)
{
    int i, transport, drumuri;

    transport = 0;
    drumuri = 1;

    for(i = 0; i < n && drumuri <= k; i++)
    {
        transport += saltele[i];

        if(transport > si)
        {
            transport = saltele[i];
            drumuri++;
        }
    }

    return !(drumuri > k);
}

int main()
{
    int i, max_size, min_size;
    int left, right, mid, s;

    in >> n >> k >> saltele[0];

    max_size = min_size = saltele[0];

    for(i = 1; i < n; i++)
    {
        in >> saltele[i];

        if(saltele[i] > min_size)
            min_size = saltele[i];

        max_size += saltele[i];
    }

    left = min_size;
    right = max_size;
    s = 0;

    while(left <= right)
    {
        mid = (left + right) / 2;

        if(check(mid))
        {
            s = mid;
            right = mid - 1;
        }
        else
            left = mid + 1;
    }

    out << s;

    return 0;
}