Cod sursa(job #2705566)

Utilizator octavi26octavian octavi26 Data 12 februarie 2021 20:38:46
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
#define N 16008

using namespace std;

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

int n, k;
int v[N];
int s[N];
int mx, suma;

void Citire()
{
    int i;
    fin >> n >> k;
    for( i=1; i<=n; i++ )
        fin >> v[i];
    for( i=1; i<=n; i++ )
        suma += v[i], mx = max( v[i], mx );
}

bool check( int x )
{
    int i;
    int ct = 1;
    int V = 0;
    for( i=1; i<=n; i++ )
    {
        V += v[i];
        if( V > x ) V = v[i], ct++;
    }
    if( ct <= k ) return 1;
    else return 0;
}

int CautareBinara()
{
    int st, dr;
    int mij;
    int poz = -1;
    st = mx; dr = suma;
    while( st <= dr )
    {
        mij = ( st + dr ) / 2;
        if( check( mij ) )
        {
            dr = mij - 1;
            poz = mij;
        }
        else
        {
            st = mij + 1;
        }
    }
    return poz;
}

void Rezolvare()
{
    int i, k;
    fout << CautareBinara();
}

int main()
{
    Citire();
    Rezolvare();
    fin.close();
    fout.close();
    return 0;
}