#include <bits/stdc++.h>
using namespace std;
#define double long double

double fx(double x, double A) {
    return 2 * x + 2 * A / pow(2, x);
}

double dfx(double x, double A) {
    return 2 - 2 * A * logl(2) / pow(2, x);
}

int main() {
    int T;
    cin >> T;
    vector<pair<double, double>> mp(T);
    for (int i = 0; i < T; i++) {
        cin >> mp[i].first >> mp[i].second;
    }
    double sum = 0;
    double perc = 1e-9;
    for (int i = 1; i < T; i++) {
        double e = sqrt(pow(mp[i].first - mp[i - 1].first, 2) +
                        pow(mp[i].second - mp[i - 1].second, 2));
        double l = 0, r = 60.0;
        while (r - l > perc) {
            double mid = (l + r) / 2;
            if (dfx(mid, e) > 0) {
                r = mid;
            } else {
                l = mid;
            }
        }
        sum += fx(l, e);
    }
    cout << setprecision(9) << fixed << sum;
}

思路:
注意到原函数为 f(x)=2x+2∗e2x 对原函数求导后可得 f′(x)=2−2elg(2)2x 遂可用二分法进行求解