题目
题解
- 多画一下发现面的数量等于交点数量+1,进而转化为求交点的数量,注意同一个交点只记一次,需要去重操作
lines = set() # 存储直线的集合
res = 1 # 初始面的数量为1
n = int(input()) # 输入边的数量
def check(A, B):
points = set() # 存储交点的集合,set去重
for line in lines:
a, b = line
if A != a: # 如果斜率不相等
x = (b - B) / (A - a) # 计算交点的x坐标,交点:Ax+B=ax+b
y = A * x + B # 计算交点的y坐标
points.add((x, y)) # 添加交点到集合中
return len(points) # 返回交点的数量
for _ in range(n):
A, B = map(float, input().split()) # 输入直线的斜率和截距
if (A, B) not in lines: # 如果该直线没有出现过
lines.add((A, B)) # 将直线添加到集合中
res += check(A, B) + 1 # 根据数学推论,面的数量是交点数量加1
print(res) # 输出最终的面的数量