数据过水&警示后人
查看原帖
数据过水&警示后人
819577
FlyPancake楼主2024/10/6 21:33

理论上,在判断可删图形时有两种方法(以下凸包为例),一种是 slope(Q[tail-1],Q[tail])<=slope(Q[tail],i),另一种是 slope(Q[tail-1],Q[tail])<=slope(Q[tail-1],i), 都表示出现了可以删去点 Q[tail]Q[tail] 的情况 (只要对边界、去重的处理足够严谨,两种写法是没有区别的)。

但是在此题中:

while(head<tail && (__int128)(Y(Q[tail])-Y(Q[tail-1]))*(X(i)-X(Q[tail-1])) >= (__int128)(Y(i)-Y(Q[tail-1]))*(X(Q[tail])-X(Q[tail-1]))) tail--;

不加 __int128 只能得 90pts。

而:

while(head<tail && (Y(Q[tail])-Y(Q[tail-1]))*(X(i)-X(Q[tail])) >= (Y(i)-Y(Q[tail]))*(X(Q[tail])-X(Q[tail-1]))) tail--;

不加 __int128 就可以得 100pts。

在此警示后人用交叉相乘比较斜率时当心爆 long long!!!鬼知道我疑惑了多久...

2024/10/6 21:33
加载中...