赞
踩
资源限制
时间限制:1.0s 内存限制:256.0MB
平面上有 N 条直线,其中第 i 条直线是 y=Ai⋅x+Bi。
请计算这些直线将平面分成了几个部分。
第一行包含一个整数 N。
以下N行,每行包含两个整数 Ai,Bi。
一个整数代表答案。
- 3
- 1 1
- 2 2
- 3 3
6
对于 50 的评测用例,1≤N≤4, −10≤Ai,Bi≤10。
对于所有评测用例,1≤N≤1000, −100000≤Ai,Bi≤100000。

由上图我们可以看出来初始是一根直线两个平面此后
每新增一条线,增加的平面数=新增直线与原图型交点数+1
- n=int(input())
- a=[]
- #list1=[]
- for i in range(n):
- a1=tuple(map(int,input().split()))#集合内的元素要求可哈希,所以这里我使用元组进行处理
- a.append(a1)
- #print(a)
- a=set(a)
- a=list(a)
- #print(a)
- '''for i in a:
- a2=list(i)
- list1.append(a2)
- #print(list1)'''
- #本来想再把里面那个部分再转为列表的,后来看不转也可以
- total=2
- for i in range(1,len(a)):
- re=[]#交点
- a1,c1=a[i]
- for j in range(i):
- a2,c2=a[j]
- #print(a1,a2,1)
- if a1==a2:#处理斜率相等两直线平行的情况
- continue
- if c1==c2:#处理两条直线在y轴上相交的情况
- x=0
- y=c1
- re.append((x,y))
- continue
- #print(a1,a2,c1,c2)
- x=(a1-a2)/(c2-c1)#a1*x+c1=a2*x+c2
- y=a1*x+c1
- re.append((x,y))
- re=set(re)
- total+=len(re)+1
- print(total)

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。