本题数据n的范围10^9说明枚举只能过一部分
考虑到杨辉三角的性质可以运用二分法和组合数进行解决
如图可知杨辉三角可以由一系列有规律的组合数组成,由于其左右对称,我们每一行仅取一半即可。从右上角到左下角的每一个斜行按从小到大排列,我们可知到第34行时数据范围就已经超过了10^9,所以斜行最多到r=17,然后对每一个斜行进行二分查找即可。注意遍历时要从大的斜行至小斜行进行遍历。
n = int(input())
#求组合数
def com(a,b):
if b>a:
return
num = 1
c = b
for i in range(c):
num *= a/b
a-=1
b-=1
return num
#二分法
def check(i,num):
l = 2*i
h = max(l,n) #l h 表示组合的下标,i表示组合的上标
mid = (l+h)//2
sum_ = 0
while l<h:
mid = (l+h)//2
if com(mid,i) >= n:
h = mid
else:
l = mid + 1
if com(l,i) == n:
sum_ += (l+1)*l//2
sum_ += i+1
return sum_
else:
return False
j = 1
for i in range(17,-1,-1):
if check(i,j):
print(check(i,j))
break
j +=2