假设给定的三角形和n个投射物像示例中的线一样。现在,每个弹丸都有一个起点位置,终点位置和一个概率。所有的开始和结束位置都以a表示,tuple (s, alpha) where s is in {0, 1, 2}
它指定三角形的边(按顺时针顺序),并0 <= alpha <= 1
指定点沿边的距离(也按顺时针顺序)。如果实际上有两个射弹相遇,则它们产生纠缠的概率为pi x pj
(其中pi和pj是两个射弹的概率)。
您需要做的是计算该三角形中有n个射弹的可能纠缠的总数,它应该在 O(nlogn)
我很困,不知道该如何开始设计,任何帮助将不胜感激!
让我们将三角形称为ABC。令MN和PQ为2个射弹。有两种情况:
M,N,P,Q位于ABC的两侧。WOLG,说M和P在AB上,N和Q在AC上,AM> AP。这两个弹丸要穿过AN <AQ。换句话说,这种类型的与MN交叉的射弹是第一点位于AM之外而第二点位于AN之外(又称为NC)的射弹。因此,计算这种纠缠的可能性:
第二种类型是当M,N,P,Q位于所有3个边上时。WOLG,说M和P在AB上,N在AC上,Q在BC上。这比较容易,因为必要和充分的条件是AP <AM。因此,我们只需要按与AB上的A的距离对所有从AB开始并在BC上结束的弹丸进行排序,对于每个MN,我们可以查询AB上的AM小于AM的那些弹丸的pj之和。
然后,我们对每对边进行此操作(第一种类型为3次,第二种类型为6次)。因此,总数应为O(N logN)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句