当前位置:   article > 正文

蓝桥杯第十一届省赛真题 平面切分 Python_python 蓝桥杯怎么平面划分验证集

python 蓝桥杯怎么平面划分验证集

 资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

平面上有 N 条直线,其中第 i 条直线是 y=Ai⋅x+Bi

请计算这些直线将平面分成了几个部分。

输入格式

第一行包含一个整数 N。

以下N行,每行包含两个整数 Ai,Bi。

输出格式

一个整数代表答案。

样例输入

  1. 3
  2. 1 1
  3. 2 2
  4. 3 3

样例输出

6

评测用例规模与约定

对于 50 的评测用例,1≤N≤4, −10≤Ai,Bi≤10。

对于所有评测用例,1≤N≤1000, −100000≤Ai,Bi≤100000。


 

 由上图我们可以看出来初始是一根直线两个平面此后

每新增一条线,增加的平面数=新增直线与原图型交点数+1

  1. n=int(input())
  2. a=[]
  3. #list1=[]
  4. for i in range(n):
  5. a1=tuple(map(int,input().split()))#集合内的元素要求可哈希,所以这里我使用元组进行处理
  6. a.append(a1)
  7. #print(a)
  8. a=set(a)
  9. a=list(a)
  10. #print(a)
  11. '''for i in a:
  12. a2=list(i)
  13. list1.append(a2)
  14. #print(list1)'''
  15. #本来想再把里面那个部分再转为列表的,后来看不转也可以
  16. total=2
  17. for i in range(1,len(a)):
  18. re=[]#交点
  19. a1,c1=a[i]
  20. for j in range(i):
  21. a2,c2=a[j]
  22. #print(a1,a2,1)
  23. if a1==a2:#处理斜率相等两直线平行的情况
  24. continue
  25. if c1==c2:#处理两条直线在y轴上相交的情况
  26. x=0
  27. y=c1
  28. re.append((x,y))
  29. continue
  30. #print(a1,a2,c1,c2)
  31. x=(a1-a2)/(c2-c1)#a1*x+c1=a2*x+c2
  32. y=a1*x+c1
  33. re.append((x,y))
  34. re=set(re)
  35. total+=len(re)+1
  36. print(total)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号