Cod sursa(job #2675302)

Utilizator TarceaIonutTarcea Tudor Ionut TarceaIonut Data 21 noiembrie 2020 13:05:33
Problema Transport Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("transport.in");
ofstream fout ("transport.out");
int a[16005];
int n , k;

int find_k(int r)
{
    int kk = 1;
    int s = 0;
    for (int i=0;i<n;i++)
    {
        if (a[i] > r)
            return k+1;
        if (s + a[i] > r)
        {
            s = a[i];
            kk++;
        }
        else
            s += a[i];
    }

    return kk;
}

int find_r(int p1 , int p2)
{
    if (p2 - p1 == 1)
    {
        if (find_k(p1) == k)
            return p1;
        return p2;
    }
    if (p1 == p2)
        return p1;
    int m = (p1 + p2) / 2;
    if (find_k(m) <= k)
        p2 = m;
    else
        p1 = m;
    find_r(p1 , p2);

}

int main()
{
    fin >> n >> k;
    fin >> a[0];
    int ma_x = a[0];
    for (int i=1;i<n;i++)
    {
        fin >> a[i];
        if (a[i] > ma_x)
            ma_x = a[i];
    }
    fout << find_r(ma_x , ma_x * k);


    return 0;
}