![](https://img-blog.csdnimg.cn/img_convert/d2ba7f639bc48cf354573b4bf6768466.png)
代码:
import os
import sys
# 请在此输入您的代码
def check(x):
res = 0
for i in range(n):
if A[i] >= x:res += (A[i]-x)//B[i] + 1
return res
n,m = map(int,input().split())
A = [-1]*(n+1)
B = [-1]*(n+1)
for i in range(n):
a,b = map(int,input().split())
A[i],B[i] = a,b
l,r = 0,2*10**6
while l < r:
mid = (l+r+1) >> 1 #最后一次技能加点的攻击力
if check(mid) >= m: l = mid
else: r = mid - 1
ans = 0
for i in range(n):
if A[i] >= r:
t = (A[i]-r) // B[i] + 1 # 减了多少次
if A[i]-(t-1)*B[i] == r : t-=1
m -= t
ans += (t * (2 * A[i] + - (t - 1) * B[i])) / 2
print(int(ans + m*r))