Cod sursa(job #2256225)

Utilizator manasapiMana Sapi manasapi Data 8 octombrie 2018 11:34:48
Problema Transport Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>

int nTrips;
int aSize;
int* ar;

int simulate(int n)
{
    int taken = 0, cargo = 0, trip = 0;
    while (taken < aSize)
    {
        if (ar[taken] + cargo <= n)
            cargo += ar[taken++];
        else
        {
            if (++trip >= nTrips)
                return 0;
            cargo = 0;
        }
    }

    return 1;

}

int main()
{
    freopen("transport.in", "rt", stdin);
    freopen("transport.out", "wt", stdout);
    scanf("%i%i", &aSize, &nTrips);

    ar = malloc(sizeof(int)*aSize);

    for(int i=0; i<aSize; i++)
        scanf("%i", ar+i);


    int loopVal = 16384 / 2;
    int dif = loopVal / 2;
    while (dif > 0)
    {
        if (simulate(loopVal))
            loopVal -= dif;
        else
            loopVal += dif;

        dif = dif/2;
    }

    if (!simulate(loopVal))
        loopVal++;
    else if (simulate(loopVal-1))
        loopVal--;

    printf("%i", loopVal);


    free(ar);

}