蓝桥杯——平面切分

这篇博客详细分析了一个二维平面上,通过计算直线交点来确定平面个数的问题。作者提供了AC代码,解释了每加入一条直线时,新增平面数量的计算方法,即新直线与已有直线的交点数(去除重复)。博客内容涉及到几何、图论和算法应用。
摘要由CSDN通过智能技术生成

题目链接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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值