蓝桥杯 省赛 平面切分(python)

图片说明

思路

平面里的一条线可以把平面分成两个部分,两条线可以分成三个或四个部分,往下寻找规律。
每增加一条线,增加的平面数量等于新增线与原本所有线的交点的个数加1。

代码

n = eval(input())
l = []
for i in range(n):
    l.append(list(map(int, input().split())))
'''
A1 * X + B1 = A2 * X + B2
(A1 - A2)*X = B2 - B1
X = (B2 - B1)/(A1 - A2)
Y = A1*X + B1
'''
res = 2 # 第一条线把平面分为两个部分
node = []
for i in range(1, n):
    for j in range(i):
      if l[i][0] != l[j][0]:
        x = (l[i][1] - l[j][1]) / (l[j][0] - l[i][0]) # 交点的x
        y = l[j][0] * x + l[j][1] # 交点的y
        if [x, y] in node:
            pass
        else:
            node.append([x, y]) # 交点添加到列表里,如果有重复就不添加
    res += len(node) + 1
    node = [] # 清空列表,准备增加下一条线。
print(res)