Atcoder abc286

https://atcoder.jp/contests/abc286/tasks

Ex - Don’t Swim

二维平面, 有N点的多边形C(逆时针给点),

以及两个点S和T(保证在多边形外部)

求从S到T不经过多边形内部的最短距离

范围

n 1e5

所有坐标 [-1e9,1e9]

2s

1024mb

我的思路

看错题了


如果是凸包, 那就还好, 按S排个角度, 每次找下一个点和S哪个夹角更小, 就完了

问题是这里可能是奇怪的形状

1
2
3
4
   xxxx
S x x
x xTx
xxx

一个事实是, 如果从当前点能不穿过其它点到S,那么就直接走, 但是又该如何判断 中间不被阻挡, 需要O(n)条边的判断?

那么其实 任意两点都满足这个性质, 如果直接能到就直接走

最短路? 还是 如何在非凸包 判断不被阻断, 不会了

题解

考虑 n个点包含S,T的凸包

如果S,T 在凸包上, 那么显然就是沿着凸包走

否则 直接到达

代码

https://atcoder.jp/contests/abc286/submissions/38433391

总结

VP 了一下, 91:51 做完了G

Ex 什么神奇的日本计算几何??

等等好像看错题了, C是凸包………………………………………………………………

参考

官方题解