Cod sursa(job #2682652)

Utilizator Robert.BrindeaBrindea Robert Robert.Brindea Data 9 decembrie 2020 10:28:14
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include<fstream>

using namespace std;

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

const int MAXN = 16002;

int n, k, a[MAXN], res = MAXN*MAXN;

int caut(int lo, int hi)
{
    if(lo > hi) return -1;
    int mid = lo + (hi-lo)/2;
    int t = 1, crt = a[0];
    if(a[0] > mid) return caut(mid+1, hi);

    for(int i = 1; i < n; i++)
    {
        if(a[i] > mid) return caut(mid+1, hi);

        if(crt+a[i] <= mid)
            crt += a[i];
        else
        {
            crt = a[i];
            t++;
        }
    }
    if(t == k) res = min(res, mid);
    if(t <= k) return caut(lo, mid-1);
    else if(t > k) return caut(mid+1, hi);
}

int main()
{
    fin >> n >> k;
    for(int i = 0; i < n; i++)
        fin >> a[i];
    caut(0, MAXN*MAXN);
    fout << res;
    return 0;
}