【Python训练营】Python每日一练----第27天:平面切分
📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅2021年度博客之星TOP100,2021年度博客之星领域TOP5,Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨
@TOC
题目描述
题目描述
平面上有 N 条直线,其中第 i 条直线是 y = A_i x + B_i 。
请计算这些直线将平面分成了几个部分。
输入描述
第一行包含一个整数 NN。
以下N 行,每行包含两个整数 A_i, B_i 。
输出描述
一个整数代表答案。
输入输出样例
示例
输入
3
1 1
2 2
3 3
输出
6
运行限制
最大运行时间:1s
最大运行内存: 256M
解题思路
- 输入时将斜率和截距以元组的形式进行存储,存储在一个大的列表中:
list1 = [tuple(map(int,input().split()))for i in range(a)]
- 将列表进行去重处理,除去相同的直线:
list1 = list(set(list1))
- 求这条直线和其他直线的交点,如果相交的话,新的直线和已有的直线共有n个交点,则划分出的部分数量多出n+1
- 如果有交点的话,则斜率一定不同,相同的话就不符合条件,继续重复上一个步骤
- 求交点:
x = (b1-b2)/(a1-a2) y = a1*x+b1
- 将交点加入集合中,集合去重,防止出现相同的交点
pos.add((x,y))
- 第二重循环外求值:
sum += len(pos)+1
源码分享
# Time : 2022/2/22 14:30
# File : 平面切分.py
# Author : 是Dream呀!
# VX : Xu18300396393
# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
a = int(input())
list1 = [tuple(map(int,input().split()))for i in range(a)]
# print(list1)
list1 = list(set(list1)) # 对线进行去重处理
sum = 0
if list1:
sum = 2
for i in range(1,len(list1)):
a1,b1 = list1[i]
# 创建集合存储下面要求的交点;
pos = set()
# 求这条直线和其他直线的交点,如果相交的话,新的直线和已有的直线共有n个交点,则划分出的部分数量多出n+1
for j in range(i):
a2,b2 = list1[j]
# 如果有交点的话,则斜率一定不同,相同的话就不符合条件,继续重复上一个步骤
if a1 == a2:
continue
# 求交点
x = (b1-b2)/(a1-a2)
y = a1*x+b1
# 将交点加入集合中,集合去重,防止出现相同的交点
pos.add((x,y))
sum += len(pos)+1
print(sum)
学习总结
1.元素形式将空格连续输入的数据进行存储:tuple(map(int,input().split()))for i in range(a)
2.求交点的方法:两条直线:y = a1x+b1和y = a2x+b2 交点: x = (b1-b2)/(a1-a2) y = a1*x+b1
`🏅今天是我在Python训练营的第 27 天,希望每天都能见到最棒的你🏅
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
- 点赞
- 收藏
- 关注作者
评论(0)