Cod sursa(job #1289138)

Utilizator raduamaistroaieRadu Amaistroaie raduamaistroaie Data 9 decembrie 2014 15:54:50
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
using namespace std;

ifstream intrare("transport.in");
ofstream iesire("transport.out");

int n, k, i;
int c[16001];

bool verificare(int s)
{
    int transporturi = 1; int marfa = 0;
    for (i=1; i<=n; ++i)
    {
        if (marfa + c[i] <= s)
        marfa += c[i];
    else
    {
        marfa = 0;
        i--;
        transporturi++;
    }
    }

    if (transporturi <= k)
        return 1;
    return 0;
}

int binarySearch (int left, int right, int lastMiddle)
{
    if (left > right)
        return lastMiddle;

    int middle = (left + right) / 2;

    if (verificare (middle) == 1)
        return binarySearch (left, middle - 1, middle);
    else
        return binarySearch (middle + 1, right, middle);
}

int main()
{
    intrare >> n;
    intrare >> k;
    if(n > 16000 or k > 16000)
    {
        return 0;
    }
    else
    {
    int suma = 0; int maxx= 0;
    for (i=1; i<=n; i++)
    {
        intrare >> c[i];
        suma += c[i];

        if (maxx < c[i])
            maxx = c[i];
    }

    iesire << binarySearch (maxx, suma, (maxx + suma) / 2);

    return 0;
    }
}