2 激光和镜子 (LASERS.CPP/C/PAS) 4
2 激光和镜子 (lasers.cpp/c/pas)
2.1 题目描述
因为一些原因,农夫约翰的奶牛总是喜欢进行激光展示。
为了它们最新的展示,奶牛们已经取得了一个巨大而强大的激光源——它是如此的
巨大,实际上,以至于它们看起来不能轻松的把它从交付的地方移动。它们想找到一种
方法把激光从光源处发送到在另一边的牛棚。光源和牛棚可以看成在二维平面上的点。
奶牛们打算旋转光源使其沿水平或竖直方向发出一束光 (也就是和 x 轴或 y 轴平行)。
它们将会通过一些镜子反射激光,使其重定向到牛棚。
在农场上有 N 个不同 的栅栏柱 (1 ≤ N ≤ 300, 000) 在二维平面上 (不同于光源和
牛棚),奶牛可以把镜子挂载在栅栏柱上面。奶牛也可以选择不在一个栅栏柱上挂载镜
子,这种情况下激光将会简单地直接从上面通过而不改变方向。如果奶牛在栅栏柱上挂
载了镜子,它们可以把镜子对齐像/或\,这样它将会把一束水平的光重定向为竖直方向,
反之亦然。
请计算奶牛最少 需要多少镜子来把激光重定向到牛棚,数据保证有解。
2.2 输入格式 (lasers.in)
第一行包含五个整数 N, x
L
, y
L
, x
B
, y
B
,其中 (x
L
, y
L
) 是光源所在的位置,(x
B
, y
B
)
是牛棚所在的位置。所有的坐标都在 0 到 1,000,000,000 之间。
接下来 N 行,每行包含一个栅栏柱的坐标,也在 0 . . . 1, 000, 000, 000 范围内。
2.3 输出格式 (lasers.out)
输出最少需要的镜子的数量。
2.4 输入样例
4 0 0 7 2
3 2
0 2
1 6
3 0
2.5 输出样例
1