Language: C++

#include<iostream>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<iomanip>
#include<vector>
#include<functional>
#include<algorithm>
#include<cstdio>
#include<unordered_map>
using namespace std;
//---------------------------------------------------
//ライブラリゾーン！！！！
#define int long long
#define str string
#define rep(i,j) for(int i=0;i<(int)(j);i++)
typedef long long ll;
typedef long double ld;
const ll inf = 999999999999999999;
const ld pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989;
struct P {
	ll pos, cost;
};
bool operator<(P a, P b) { return a.cost < b.cost; }
bool operator>(P a, P b) { return a.cost > b.cost; }
struct B {//隣接リスト表現
	ll to, cost;
};
struct S {//辺の情報を入れる変数
	int from, to, cost;
};
ll gcm(ll i, ll j) {//最大公約数
	if (i > j) swap(i, j);
	if (i == 0) return j;
	return gcm(j%i, i);
}
//---------------------------------------------------
//+++++++++++++++++++++++++++++++++++++++++++++++++++
struct A {
	int x, y;
};
bool operator<(A a, A b) { return a.x < b.x; }
int so(int b) {
	return 100000000 - b;
}
A a[200000], s, g;
int n, dp[200002], s2=inf, g2, ans;
signed main() {
	cin >> s.x >> s.y >> g.x >> g.y >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i].x >> a[i].y;
	sort(a, a + n);
	if (s.x > g.x) {
		s.x=so(s.x);
		g.x=so(g.x);
		for (int i = 0; i < n; i++)
			a[i].x = so(a[i].x);
	}
	if (s.y > g.y) {
		s.y = so(s.y);
		g.y = so(g.y);
		for (int i = 0; i < n; i++)
			a[i].y = so(a[i].y);
	}
	if (s.x == g.x) {
		for (int i = 0; i < n; i++) 
			if (s.x == a[i].x&&s.y < a[i].y&&a[i].y < g.y) {
				printf("%.20LF\n", (g.y - s.y) * 100 + 10 * pi - 20);
				goto loop;
			}
		cout << (g.y - s.x) * 100 << endl;
		goto loop;
	}
	if (s.y == g.y) {
		for(int i=0;i<n;i++)
			if (s.y == a[i].y&&s.x < a[i].x&&a[i].x < g.x) {
				printf("%.20LF\n", (g.x - s.x) * 100 + 10 * pi - 20);
				goto loop;
			}
		cout << (g.x - s.x) * 100 << endl;
		goto loop;
	}
	for (int i = 0; i < n; i++) {
		if (s2 == inf&&a[i].x >= s.x)
			s2 = i;
		if (g.x >= a[i].x)
			g2 = i;
		dp[i] = inf;
	}
	dp[n] = inf, dp[n + 1] = inf, dp[0] = 0;
	for (int i = s2; i <= g2; i++) {
		if (a[i].y <= g.y&&a[i].y >= s.y)
			*lower_bound(dp, dp + n, a[i].y) = a[i].y;
	}
	int k = lower_bound(dp, dp + n + 2, inf) - dp - 1;
	printf("%.20LF\n", (g.x - s.x + g.y - s.y) * 100 + k * 5 * pi - 20 * k);
loop:;
	getchar(); getchar();
}

Compiler output:
a.cc: In function 'int main()':
a.cc:100:1: error: jump to label 'loop'
  100 | loop:;
      | ^~~~
a.cc:72:38: note:   from here
   72 |                                 goto loop;
      |                                      ^~~~
a.cc:98:13: note:   crosses initialization of 'long long int k'
   98 |         int k = lower_bound(dp, dp + n + 2, inf) - dp - 1;
      |             ^