Cod sursa(job #2541893)

Utilizator horeste12Stoianovici Horatiu Andrei horeste12 Data 9 februarie 2020 03:29:34
Problema Transport Scor 100
Compilator py Status done
Runda Arhiva de probleme Marime 1.23 kb

with open('transport.in') as f:
    lines = f.read().split("\n")
    n = int(lines[0].split()[0])
    k = int(lines[0].split()[1])
    a = [int(x) for x in lines[1:n + 1]]

maxSol = sum(a)
minSol = max(a)


def getSolution(val):
    currentSum = 0
    nrOfGroups = 1
    for elem in a:
        currentSum += elem
        if currentSum > val:
            nrOfGroups += 1
            currentSum = elem
            if nrOfGroups > k:
                return False
    return True


def binarySearch(start, end):
    if end < start:
        return None

    print(start, end)
    middle = int((start + end) / 2)
    middleSolution = getSolution(middle)

    if start == end:
        if middleSolution:
            return middle
        else:
            return None

    if middleSolution:
        # putem mai bine => cauta in stanga
        leftSolution = binarySearch(start, middle - 1)
        if leftSolution is not None:
            return leftSolution
        return middle
    else:
        # nu mere => cauta in dreapta
        rightSolution = binarySearch(middle + 1, end)
        return rightSolution

res = binarySearch(minSol, maxSol)

with open('transport.out', 'w') as g:
    g.write(str(res))