Cod sursa(job #2679638)

Utilizator andreipirjol5Andrei Pirjol andreipirjol5 Data 1 decembrie 2020 09:27:53
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

using namespace std;
ifstream in ("transport.in") ;
ofstream out ("transport.out") ;
const int M = 16005 ;
int N , k , v[M] , val ;
long long s ;
bool ok (int med)
{
    int i, sc, nrtr ;
    sc = nrtr = 0 ;
    for(i = 1 ; i <= N ; i++)
    {
        if(v[i] > med)
            return 0 ;
        if(sc + v[i] <= med)
            sc = sc + v[i] ;
        else
        {
            nrtr++;
            sc = v[i] ;
        }
    }
    nrtr++;
    return (nrtr <= k) ;
}
int bsL (int st , int dr)
{
    int med, last ;
    while(st <= dr)
    {
        med = (st + dr) / 2 ;
        if(ok(med))
        {
            last = med ;
            dr =med - 1 ;
        }
        else
            st = med + 1 ;
    }
    return last ;
}
int main()
{
    in >> N >> k ;
    for(int i = 1 ; i <= N ; i++)
    {
        in >> v[i] ;
        s = s + v[i] ;
    }
    val = bsL(1 , s) ;
    out << val ;
    return 0;
}