【发布时间】:2013-10-28 07:59:18
【问题描述】:
有人可以向我解释一下为什么在以下解决方案中使用 GCD:
http://www.codechef.com/viewsolution/2849602(用于 c)
http://www.codechef.com/viewsolution/2849324(用于 c++)
提问:http://www.codechef.com/ACMKAN13/problems/LINEPROB
狙击手站在 2D XY 平面上的点 (x1, y1)。他从他的位置向点 (x2, y2) 射击。你可以假设所有的点都是整数。
考虑由 XY 平面上的整数点形成的二维网格。 Sniper 和 Target 的位置是这个网格中的格点。狙击手射出的子弹会沿着从 (x1, y1) 到 (x2, y2) 的直线轨迹。子弹不会超过 (x2, y2)。
考虑当狙击手站在 (1, 1) 并且目标位于 (4, 3) 时子弹的轨迹。
注意子弹的轨迹如何接触 4 个单元格。当且仅当子弹将进入单元格时,才认为该单元格被轨迹触及。子弹的轨迹触及了多少细胞?
 输入
第一行包含一个整数 T,即测试用例的数量。以下 T 行中的每一行都包含一个测试用例。每个测试用例包含 4 个整数 x1、y1、x2 和 y2。整数由单个空格字符分隔。 输出
对于每个测试用例,输出一行,包含子弹从 (x1, y1) 到 (x2, y2) 的轨迹所触及的单元格数。请记住,当且仅当子弹进入单元格时,才认为一个单元格被弹道接触 - 仅接触一侧是不够的。 约束
0
示例输入
3 0 0 3 2 0 0 2 2 0 0 1 0
样本输出
4 2 0
【问题讨论】:
-
是的,已经结束了,但是我只是想知道使用GCD背后的逻辑。我其实很喜欢这个解决方案,但找不到理由。
标签: c++ c algorithm math geometry