校招题题解分析

小Q定义了一种特殊的三元组叫做三角形三元组

对于一个有序的三元组(a,b,c),如果a,b,c都是正整数,并且a,b,c三边能构成一个三角形,就称之为三角形三元组。

例如(1,2,3)不是三角形三元组,而(3,4,5)和(3,5,4)是不同的三角形三元组。

小Q现在给出三个正整数X,Y,Z,希望你能求出一共有多少三角形三元组(a,b,c)满足1<=a<=X,1<=b<=Y, 1<=c<=Z.

输入三个数X Y Z,输出结果R

解题思路:

按照排列组合的方式算出总共的三元组数量即为RES,之后将其中不符合要求的三元组删除即可。其中不符合要求的主要为两种:

a+b<=c 和 (a-b>=c;b-a>=c)

python代码如下所示:

# --*-- coding:utf8 --*--
import time
m,n,k =sorted([int(x) for x in raw_input().split(' ')])

res = m*n*k
i = 1
while i<=m:
    res -= (i-1)*i/2
    one = k-i
    two = max(1, k-n-i+1)
    res -= (one + two)*(one - two + 1)/2
    res -= (n - i + 1) * (n - i) / 2
    i += 1

print res%1000000007

其中由于结果过大,因此将结果余1e9+7。最初写了两层循环,可惜没有ac。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值