Cod sursa(job #1795531)

Utilizator teo.cons98Constantin Teodor-Claudiu teo.cons98 Data 2 noiembrie 2016 17:01:10
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<iostream>
#include<fstream>
using namespace std;

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

int v[16001], n, k;

long long min1 = 999999999;

void citire()
{
    fin>>n>>k;
    for(int i = 1; i <= n; ++i)
    {
        fin>>v[i];
    }
}

bool verificare(long long x)
{
    long long e = 0, s = 0;

    for(int i = 1; i <= n; ++i)
    {
        if(v[i] > x)
        {
            e = k + 1;
            break;
        }
        s += v[i];
        if(s > x)
        {
            s = v[i];
            e++;
        }
    }
    if(e < k) return 1;
    return 0;
}

void cautBin(long long p, long long u)
{
    if(p <= u)
    {
        long long mid = (p + u) / 2;
        if(verificare(mid))
        {
            if(mid < min1) min1 = mid;
            cautBin(p, mid - 1);
        }
        else cautBin(mid + 1, u);
    }

}

int main()
{
    citire();
    cautBin(1, 1000000000);
    fout<<min1;
}