Cod sursa(job #1540477)

Utilizator msschFMI - Enache Alexandru Madalin mssch Data 2 decembrie 2015 20:24:02
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;

long long v[16001], n, k;

int suma(int x)
{
    long long i, j = 0, s = 0;
    for(i = 1; i <= n; i++)
        if(s + v[i] <= x)
            s += v[i];
        else
        {
            j++;
            s = v[i];
        }
    if(s)   j++;
    if(j <= k)
        return 1;
    return 0;
}

long long binarsearch(long long i, long long j)
{
    if(i > j)  return -1;
    long long mij = (i + j) / 2;
    if(suma(mij))
    {
        int x = binarsearch(i, mij - 1);
        if(x < 1)
            return mij;
        else return binarsearch(i, mij - 1);
    }
    else return binarsearch(mij + 1, j);
}

int main()
{
    long long i, max = 0;
    ifstream f("transport.in");
    ofstream g("transport.out");
    f >> n >> k;
    for( i = 1; i <= n; i++)
        {
            f >> v[i];
            if(v[i] > max)
                max = v[i];
        }
    g<<binarsearch( max, max * k + 1);
    return 0;
}