在 Python 中查找有多少行相交的程序

假设给定一个列表,其中包含成对的 (m, c) 值。这些值代表一条线,其中 y = mx + c。我们还给出了两个值,l 和 r。我们必须找出在范围 x = l 到 x = h 之间相交的线的数量。

因此,如果输入类似于 input_list = [[4, 6],[-6, 10],[8, 12]], l = 0, h = 2,则输出将为 2。

如果我们查看给定的照片,线 4x + 6 = 0 和 -6x + 10 在给定范围内相交。所以,有两条相交的线,所以输出是 2。

示例

让我们看看以下实现以更好地理解 -

from collections import Counter

def solve(input_list, l, h):

   seg = [(m * l + c, m * h + c, i) for i, (m, c) in

enumerate(input_list)]

   seg.sort()

   ans = [0 for _ in input_list]

   c = Counter(seg)

   for (x, y, i) in seg:

      if c[x] > 1:

         ans[i] = 1

   max_c = -(10 ** 10)

   prv = -(10 ** 10)

   for (x, y, i) in seg:

      if x == prv:

         ans[i] = 1

      if y <= max_c:

         ans[i] = 1

      max_c = max(max_c, y)

      prv = x

   min_c = 10 ** 10

   prv = 10 ** 10

   for (x, y, i) in seg[::-1]:

      if x == prv:

         ans[i] = 1

      if y >= min_c:

         ans[i] = 1

      min_c = min(min_c, y)

      prv = x

   return sum(ans)

print(solve([[4, 6],[-6, 10],[8, 12]], 0, 2))

输入

[[4, 6],[-6, 10],[8, 12]], 0, 2
输出结果
2

以上是 在 Python 中查找有多少行相交的程序 的全部内容, 来源链接: utcz.com/z/363257.html

回到顶部