如果你这题写的半平面交:
-
Y 坐标绝对值可达 5×1011,各种极值 1012 起步;
-
用极角排序法求半平面交的,可以先
double UKX = 1e6,UKY = 5e11;
Seg[++idx] = segment( vec2( 2 * UKX , 2 * UKY ) , vec2( -4 * UKX , 0 ) );
Seg[++idx] = segment( vec2( -2 * UKX , 2 * UKY ) , vec2( 0 , -4 * UKY ) );
Seg[++idx] = segment( vec2( -2 * UKX , -2 * UKY ) , vec2( 4 * UKX , 0 ) );
Seg[++idx] = segment( vec2( 2 * UKX , -2 * UKY ) , vec2( 0 , 4 * UKY ) );
这样把整个区域围起来,就不会有无限平面交的问题了;
3.最坑的一点,不仅要用折线上的点去碰半平面交的凸壳,也要用半平面交下凸壳的点去碰折线!
否则 hack 数据如下(官方数据 2):
input: 4 10 20 49 59 0 10 10 0
output:14.500