思路:浮点数三分。题目给定了单峰函数,并且每个单峰函数的相互独立。所以说我们每两个点之间算出一个单峰函数,之后再用浮点数三分把给算出来,并且算出具体的函数值,接着不断累加到ans中,最终输出答案即可

技巧:三分函数我们只需要写找最大值单峰的逻辑即可,然后用一个find_max变量来记录我们是否找的是最大值,如果是的话就为True,直接用我们写的找最大值单峰逻辑即可;否则为False,就意味着我们要三分的函数为最小值单峰函数,那就可以整体添加一个-号,把他变成最大值单峰函数,之后就可以复用找最大值单峰的逻辑了。最终,找到并输出最大值/最小值对应的自变量,以及最大值/最小值即可

代码:

import sys
input = lambda: sys.stdin.readline().strip()

import math
inf = 10 ** 18

def I():
    return input()

def II():
    return int(input())

def MII():
    return map(int, input().split())

def LI():
    return input().split()

def LII():
    return list(map(int, input().split()))

def LFI():
    return list(map(float, input().split()))

fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))

'''

'''

def ternary_search(func, l, r, eps=1e-9, find_max=True):
    f = func if find_max else lambda x: -func(x)

    while r - l > eps:
        m1 = l + (r - l) / 3
        m2 = r - (r - l) / 3

        f1, f2 = f(m1), f(m2)

        if f1 < f2:
            l = m1
        else:
            r = m2

    mid = (l + r) / 2
    return mid, func(mid)

def solve():
    n = II()

    def dis(x1, y1, x2, y2):
        return math.sqrt(abs(x2 - x1) * abs(x2 - x1) + abs(y2 - y1) * abs(y2 - y1))

    ans = 0
    pre_x = pre_y = -1
    for i in range(n):
        x, y = LFI()
        if i == 0:
            pre_x, pre_y = x, y
            continue

        e = dis(pre_x, pre_y, x, y)
        func = lambda k: 2 * k + 2 * e / (2 ** k)
        ans += ternary_search(func, 0, 1e3, find_max=False)[1]
        pre_x, pre_y = x, y

    print(ans)

t = 1
# t = II()
for _ in range(t):
    solve()