题目链接:http://oj.ecustacm.cn/problem.php?id=1524
题目分析
找规律就好了,从第一条边开始切分平面,可以发现每加入一条边,新增的平面个数就等于加入的边与之前的边的交点个数(去掉重复的交点)+1。
AC代码
from math import *
def Cross_Point(k1,b1,k2,b2):
global eps
x=(b2-b1)/(k1-k2)
y=k1*x+b1
return (round(x,eps),round(y,eps))
n=int(input())
line=[]
for i in range(n):
line.append(tuple(map(int, input().split())))
line=list(set(line))
eps=6
#对于每条新增加的直线,计算其与所有直线的交点
ans=1
for i in range(len(line)):
k,b=line[i]
ans+=1
Points = set() # 保存本轮的交点集合
for k1,b1 in line[:i]:
if k1==k:#平行跳过
continue
x,y=Cross_Point(k1,b1,k,b)
if (x,y) not in Points:
ans+=1
Points.add((x,y))
print(ans)