Cod sursa(job #2257004)

Utilizator manasapiMana Sapi manasapi Data 9 octombrie 2018 15:52:24
Problema Transport Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 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()
{
    int sum = 0;
    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);
        sum += ar[i];
    }


    int loopVal = sum+1;
    int dif = loopVal >> 1;
    while (dif > 0)
    {
        if (simulate(loopVal))
            loopVal -= dif;
        else
            loopVal += dif;

        dif>>=1;
    }


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

    printf("%i", loopVal);


    free(ar);

}