Cod sursa(job #2600650)

Utilizator matei8787Matei Dobrea matei8787 Data 13 aprilie 2020 02:12:54
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<bits/stdc++.h>
using namespace std;
int st[16005],n,v[16005],k;
void cpy()
{
    int l=0;
    for ( int i = n ; i >= 1 ; i-- )
        st[++l] = v[i];
}
bool check ( int ans )
{
    int l = n,dr = 0;
    while ( dr <= k && l >= 1 ){
        int s = 0;
        while ( s + st[l] <= ans ){
            s += st[l];
            l--;
        }
        dr++;
    }
    if ( dr <= k )
        return true;
    return false;
}
int cb ( int minim , int maxim )
{
    int st = minim , dr = maxim;
    while ( st < dr - 1 ){
        int mij = ( st + dr ) / 2;
        if ( check(mij) == true ){
            dr = mij;
        }
        else
            st = mij;
    }
    if ( check(st) == true )
        return st;
    return dr;
}
ifstream in("transport.in");
ofstream out("transport.out");
int main()
{
    in>>n>>k;
    int mini=0,maxi=0;
    in>>v[1];
    mini = maxi = v[1];
    for ( int i = 2 ; i <= n ; i++ ){
        in>>v[i];
        maxi += v[i];
        if ( mini > v[i] )
            mini = v[i];
    }
    cpy();
    out<<cb(mini,maxi);
    return 0;
}