Pagini recente » Borderou de evaluare (job #1769107) | Borderou de evaluare (job #200915) | Borderou de evaluare (job #778047) | Borderou de evaluare (job #1292457) | Cod sursa (job #2541893)
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))