#TX14. 旅游团

旅游团

GESP C++ 5级模拟题

题目名称:旅游团

知识点

  • 循环结构(for循环、嵌套循环)
  • 条件判断(if语句)
  • 数学运算(加法、比较)
  • 算法思维(滑动窗口思想)

题目描述

小明计划参加一个旅游团,但他只有 t 天假期,不够完成整个旅游行程。贴心的旅行社老板允许他中途加入旅游团,跟随旅游团游览一段时间。

这个旅游团有 n 个景点,按顺序游览。旅行社计划用 a_i 天游览第 i 个景点。

小明可以从这 n 个景点中的任意一个开始加入旅游团。一旦加入,他必须按照旅游团的顺序,一个接一个地游览后续景点。如果发现自己的假期不够去下一个景点(比如只剩1天,但下一个景点需要2天),他就会选择在当前景点结束行程。

请计算小明最多能游览多少个景点。


输入格式

第一行,包含两个整数 nt,分别表示景点数量和小明的假期天数 (1 ≤ n ≤ 50000,1 ≤ t ≤ 10^9)

第二行,包含 n 个正整数 a₁, a₂, ..., aₙ,表示游览第 i 个景点所需的天数 (1 ≤ a_i ≤ 1000)

输出格式

一行,输出一个整数,表示小明最多能游览的景点数量。


样例输入1

4 5
3 1 2 1

样例输出1

3

样例1说明:

  • 景点1需要3天,景点2需要1天,景点3需要2天,景点4需要1天
  • 如果从景点1开始:3天(景点1)+ 1天(景点2)+ 2天(景点3)= 6天 > 5天,只能游览景点1和景点2,共2个景点
  • 如果从景点2开始:1天(景点2)+ 2天(景点3)+ 1天(景点4)= 4天 ≤ 5天,可以游览景点2、3、4,共3个景点
  • 如果从景点3开始:2天(景点3)+ 1天(景点4)= 3天 ≤ 5天,可以游览景点3、4,共2个景点
  • 如果从景点4开始:1天(景点4),可以游览景点4,共1个景点
  • 最多能游览3个景点

样例输入2

5 10
2 3 4 1 5

样例输出2

4

样例2说明:

  • 从景点2开始:3 + 4 + 1 + 5 = 13天 > 10天
  • 从景点2开始:3 + 4 + 1 = 8天 ≤ 10天,可以游览景点2、3、4,共3个景点
  • 从景点3开始:4 + 1 + 5 = 10天 ≤ 10天,可以游览景点3、4、5,共3个景点
  • 从景点1开始:2 + 3 + 4 + 1 = 10天 ≤ 10天,可以游览景点1、2、3、4,共4个景点
  • 最多能游览4个景点

样例输入3

3 2
5 1 1

样例输出3

2

样例3说明:

  • 从景点1开始:5天 > 2天,无法游览
  • 从景点2开始:1 + 1 = 2天 ≤ 2天,可以游览景点2、3,共2个景点
  • 从景点3开始:1天 ≤ 2天,可以游览景点3,共1个景点
  • 最多能游览2个景点

提示

  1. 算法思路

    • 枚举所有可能的起点(从第1个到第n个景点)
    • 对于每个起点,尽可能多地游览后续景点
    • 记录所有起点中能游览的最多景点数
  2. 实现步骤

    • 外层循环:枚举起点 i(从0到n-1)
    • 内层循环:从起点i开始,累加景点天数,直到总天数超过t
    • 更新最大景点数
  3. 注意事项

    • 如果从某个景点开始,该景点本身的天数就超过t,则无法游览任何景点
    • 需要找到所有起点中,能游览最多景点的方案
  4. 时间复杂度

    • 最坏情况 O(n²),对于n≤50000可能较慢
    • 可以使用滑动窗口优化到O(n)

难度评估

难度: ⭐⭐⭐⭐☆(中等偏难)

适合: GESP C++ 一级考生练习


算法思维考察点

  1. 枚举思想:需要枚举所有可能的起点
  2. 贪心思想:从每个起点开始,尽可能多地游览景点
  3. 滑动窗口:可以使用滑动窗口优化时间复杂度
  4. 边界处理:需要正确处理无法游览任何景点的情况