【py交易】算法竞赛入门经典5.4.3果园里的树 Python

这里写图片描述

分析:
1.可借助三角形的有向面积计算,原理不懂,但是有公式,记住就可:
这里写图片描述
如果 》0,则说明ABC三点呈现逆时针排列,<0反之,=0共线
2.三个点为A、B、C,三个点的x最大值是maxX,最小值是minX,y最大值是maxY,最小值是minY,虽然x和y属于1到99,但是x只需要遍历minX到maxX,y只需要遍历minY到maxY的整数点就可以了
3.假设任意一个点为P,则三角形内的树的位置p应满足Sabc>=Spab+Spac+Spbc
4. if abs((Spab + Spbc + Spac) - Sabc) < eps 这句最开始是if (Spab + Spbc + Spac)<=Sabc,但算出来不对,dont knw why。。。以后再研究py的浮点数问题(flag)
5.py居然没有三目运算符!
6.输入 1.5 1.5 1.5,6.8 6.8,1.5这种输入格式暂不知道如何用py实现(摊手,whatever)

# coding=utf-8

import  math
"5.4.3果园里的树"


"输入三个点,求出三个点所围成的三角形的有向面积"
def triangleArea(x1,y1,x2,y2,x3,y3):
    area = ( x1*y2 + x3*y1 + x2*y3 - x3*y2 - x1*y3 - x2*y1)/2
    if area < 0:
        area = -area
    return  area

a = raw_input()
x1 = float(a.split(",")[0])
y1 = float(a.split(",")[1])
b = raw_input()
x2 = float(b.split(",")[0])
y2 = float(b.split(",")[1])
c = raw_input()
x3 = float(c.split(",")[0])
y3 = float(c.split(",")[1])

Sabc  = triangleArea(x1,y1,x2,y2,x3,y3)


# print "Sabc = ",Sabc
"找出x和y的上下界,减少遍历的次数"
"下界1.5时,应该为2,上取整"
"上届6.8时,应该为6,下取整"
minX = int(math.ceil(min(x1,x2,x3)))
maxX = int(max(x1,x2,x3))
minY = int(math.ceil(min(y1,y2,y3)))
maxY = int(max(y1,y2,y3))

potNum = 0
eps = 0.0001#误差,xjb选的
for i in range(minX,maxX+1,1):
    for j in range(minY,maxY+1,1):
        # print i,j
        Spab = triangleArea(i,j,x1,y1,x2,y2)
        Spac = triangleArea(i,j,x1,y1,x3,y3)
        Spbc = triangleArea(i,j,x2,y2,x3,y3)
        if abs((Spab + Spbc + Spac) - Sabc) < eps :

            # print (Spab + Spbc + Spac)
            potNum += 1
            # print Spab,Spac,Spbc
print potNum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值