题解:蓝桥云课 3404 肖恩的乘法表
【题目来源】
蓝桥云课:1.肖恩的乘法表 - 蓝桥云课 (lanqiao.cn)
【题目描述】
肖恩认为一般的乘法表不够美观,因为它是三角形的所以肖恩认为不够整齐。肖恩自己制作了一张矩形乘法表, 对于一张 \(n\times m\) 的矩形乘法表,肖恩会把 \(i\times j\) 填充到矩形的第i行第 \(j\) 列的位置。现在,肖恩向你提问:在这张乘法表中,第 \(k\) 大的元素是多少?
矩形乘法表中第 \(k\) 大元素是指将矩形乘法表中所有元素从小到大排列后的第 \(k\) 个元素。
【输入】
输入三个数字 \(n,m,k\),每个数字的意义和问题描述中相同。
【输出】
输出一个数字表示第k大的元素。
【输入样例】
2 4 5
【输出样例】
4
【算法标签】
《蓝桥云课 3404 肖恩的乘法表》 #思维# #二分#
【代码详解】
n, m, k = map(int, input().split())
#第k小在区间[1, n*m]
left, right = 1, n*m
#计算乘法矩阵中有多少个数字小于等于x
def check(x):
cnt = 0
for i in range(1, n+1):
#第i行的数字为:i,2i,3i,...,mi
#i*j<=x => j<=x//i
cnt += min(m, x//i)
return cnt
ans = 0
while left<=right:
mid = (left+right) // 2
#第k小的数字mid,在原数组中小于等于mid的数字至少有k个
if check(mid)>=k:
ans = mid
right = mid - 1
else:
left = mid + 1
print(ans)
【运行结果】
2 4 5
4
浙公网安备 33010602011771号