"""
description:
given a (X,Y,Z), 1 <= x <= X, 1<=y<=Y, 1<=z<=Z, (x,y,z) is all integer,
(x,y,z) can form a triangle, give the number of triplet that satisfies the condition.
you can give the modulus of 1000000007
example 1:
input:
2 3 3
output:
9
(1,1,1),(1,2,2),(1,3,3),(2,1,2),(2,2,1),(2,2,2),(2,2,3),(2,3,2),(2,3,3)
"""
"""
基本思想:尋找滿足三角不等式的三元組個數,本質上是一個線性規劃(整數規劃)問題,然而這個問題太經典了,實際上是有公式的。這裏實現的是對最小的一維進行遍歷,在二維平面上總結公式的做法,相當於假設不知道公式,而去總結歸納。在二維平面內,所有點減去不符合的點,剩下的就是符合的點
"""
import sys
fixed_num = int(10**9+7)
def get_once(z, xyz):
X, Y, _=xyz
data = [
int((z-1)*z/2),
int((X-z+1)*(X-z)/2),
int((Y-z+1)*(Y-z)/2)
]
return int(X*Y - data[0] - data[1] - data[2])
def get_triple_num(xyz):
num = 0
for z in range(xyz[2]):
z += 1
num += get_once(z, xyz)
print(num)
return num % fixed_num
def my_min(data):
min_idx, min_data = 0, data[0]
for idx, data_temp in enumerate(data):
if data[idx]<min_data:
min_idx = idx
min_data = data_temp
return min_idx, min_data
if __name__=="__main__":
line = sys.stdin.readline().strip()
x, y, z = line.split(" ")
xyz = [int(x),int(y),int(z)]
min_idx, min_data = my_min(xyz)
xyz[min_idx], xyz[2] = xyz[2], xyz[min_idx]
print(get_triple_num(xyz))
筆試編程題彙總(3)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.