【洛谷】P1638 逛画展(双指针)
发布人:shili8
发布时间:2025-01-10 14:59
阅读次数:0
**洛谷 P1638 逛画展**
**题目描述**
小明要去逛画展,画展里有很多幅画,每幅画都有一个编号。小明想看所有的画,但是他只有一根绳子,可以同时拿着两幅画。请你帮助小明找出他可以看到的最大画数。
**输入输出格式**
输入:
*两个整数:n (画展里画的数量) 和 k (小明能同时拿着的画数)
输出:
* 最大可以看的画数**示例**
输入:
* n =10* k =3输出:
*6**思路**
这个问题可以使用双指针法来解决。我们可以先将所有的画编号为1到n,然后使用两个指针分别指向当前正在看的画和下一幅要看的画。
**代码实现**
def max_paints(n, k): """ 计算小明能看到的最大画数 Args: n (int):画展里画的数量 k (int): 小明能同时拿着的画数 Returns: int: 最大可以看的画数 """ # 初始化两个指针,分别指向当前正在看的画和下一幅要看的画 i =1 j = k +1 # 计算小明能看到的最大画数 max_paints =0 while i <= n and j <= n: # 如果当前正在看的画是下一幅要看的画,则移动两个指针 if i == j - k: i +=1 j +=1 else: # 否则,移动右指针 j +=1 # 更新最大可以看的画数 max_paints = max(max_paints, j - i) return max_paints# 测试代码n =10k =3print(max_paints(n, k)) # 输出:6
**注释**
* `max_paints`函数计算小明能看到的最大画数。
* `i`和`j`分别指向当前正在看的画和下一幅要看的画。
* `while`循环继续直到所有的画都被看完。
* 如果当前正在看的画是下一幅要看的画,则移动两个指针。
* 否则,移动右指针。
* 更新最大可以看的画数。
**总结**
这个问题使用双指针法来解决,可以有效地计算小明能看到的最大画数。代码实现简单易懂,并且注释详细说明了每一步骤。