P14752 Hit or not?

题目背景

"Jee 这人真有意思,问他空了中了,他说赚了。"

题目描述

子弹判定是 fps 游戏中老生常谈的问题。 现在我们讨论一个简化版本: 将敌人的身体投影简化为二维平面上的凸多边形,其顶点数为 $n$,第 $i$ 个顶点的坐标为 $(x_i,y_i)$,顶点以逆时针顺序给出。现在东可站在地图 $x$ 轴上的点 $O(x_0,0)$ 处,向正前方($y$ 轴正方向)开枪射击,子弹沿射线飞行。由于敌人是凸多边形,子弹只会击中一条边。现在你是游戏设计师,需要找到子弹首先击中的是哪条边。 注意到:由于取样的点越多,凸多边形近似越精确,因此多边形的顶点数可能很大。

输入格式

第一行一个正整数 $n\ (3 \le n \le 3000)$,表示凸多边形的顶点数。 接下来 $n$ 行,每行两个整数 $x_i,y_i\ (-10^9 \le x_i \le 10^9, 0 \le y_i \le 10^9)$,以逆时针顺序给出每个顶点坐标。 最后一行一个整数 $x_0\ (-10^9 \le x_0 \le 10^9)$,表示点 $O$ 的横坐标,数据保证点 $O$ 严格在多边形外部。 保证所有点横坐标两两不同,子弹会射中恰好一条边。

输出格式

输出两个整数 $a,b\ (1 \le a, b \le n)$,表示射线首先碰到的边的两个端点的索引,你可以以任意顺序输出它们。