查找满足配置的位置数

时间:2014-04-06 23:57:08

标签: algorithm dynamic-programming graph-algorithm adhoc

你想要一个完成激光表演的派对。不幸的是,你发现的唯一工作激光器远离你的房子而且太重而无法移动,所以你想要的 用一系列镜子将激光重新导向房子。

网格的布局使激光在位置(0,0)指向北方(in 正y方向)和房子(Hx,Hy);我们可以想到两者 激光器和房子作为2D平面中的点。已有N个镜子 (1 <= N <= 100,000)分散在整个网格中 与轴成45度角对齐。例如,镜子对齐 喜欢\将从下面进入一束光并将其反射到 剩下。我们还可以将镜子视为位于镜头中的点 2D平面。

设置完配置后,您会注意到计划中存在一个主要缺陷:激光无法通过当前配置的镜子进入房屋!结果,你打算跑到场地上,然后再举起一面镜子(再次放在45 角度)以将激光重定向到房屋上。请数 在您可以完成的领域中的位置数量 这个目标。

所有坐标都是-1,000,000,000到1,000,000,000之间的整数。它 保证任何要放置的镜子都在这个范围内。 在离开这个位置后,光束永远不会回到(0,0)(并且镜子处于初始配置状态时,保证不会发生这种情况)。没有两面镜子 在太空中占据同一点,你无法找到自己的位置 与现有镜子相同的位置。

INPUT FORMAT:

* Line 1: The integers N, Hx, and Hy.

* Lines 2..N + 1: Line i+1 describes the ith mirror with 3 elements:
        its (x,y) location, and its orientation (either '\' or '/').

INPUT:

4 1 2
-2 1 \
2 1 /
2 2 \
-2 2 /

OUTPUT FORMAT: A single integer giving the number of locations
where you can stand to redirect the laser to the house.

OUTPUT:

2

OUTPUT DETAILS:

A mirror at (0,1) or (0,2) placed in either direction would do the trick.

我的尝试: 我实际上尝试过蛮力解决方案。我首先将镜子添加到场的一些随机位置,通常在一个2 * Hx X 2 * Hy大的盒子中然后模拟镜子。如果它到了家,我会增加我的数量。对于小输入,这成功了,但是当我使用更大的输入时程序崩溃了。

0 个答案:

没有答案