题解:洛谷 P5709 苹果和虫子

【题目来源】

洛谷:P5709 【深基2.习6】Apples Prologue / 苹果和虫子 - 洛谷

【题目描述】

八尾勇喜欢吃苹果。她现在有 \(m(1\le m\le 100)\) 个苹果,吃完一个苹果需要花费 \(t(0\le t\le 100)\) 分钟,吃完一个后立刻开始吃下一个。现在时间过去了 \(s(1\le s\le 10000)\) 分钟,请问她还有几个完整的苹果?

【输入】

输入三个非负整数表示 \(m,t,s\)

【输出】

输出一个整数表示答案。

【输入样例】

50 10 200

【输出样例】

30

【核心思想】

  1. 问题分析:给定 \(m\) 个苹果,吃一个需 \(t\) 分钟,经过 \(s\) 分钟后求剩余完整苹果数。需处理边界情况:\(t=0\)(瞬间吃完)、刚好吃完整数个、正在吃一个但未吃完。

  2. 算法选择

    • 分类讨论:根据 \(t\) 是否为 \(0\)\(s/t\)\(m\) 的关系、\(s \bmod t\) 是否为 \(0\) 分四种情况计算
  3. 关键步骤

    • 读入数据cin >> m >> t >> s
    • 分类处理
      • \(t = 0\):吃苹果时间为 0,瞬间吃完所有,ans = 0
      • \(s / t \ge m\):时间足够吃完 \(m\) 个或更多,ans = 0
      • \(s \% t = 0\):时间刚好吃完整数个苹果,ans = m - s/t
      • 否则:正在吃第 \((s/t + 1)\) 个苹果但未吃完,该苹果不完整需舍弃,`ans = m - s/t - 1$
    • 输出结果cout << ans
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),常数次算术运算和判断
    • 空间复杂度:\(O(1)\),仅需常数个变量
  5. 分类讨论的核心思想

    • 边界优先\(t=0\) 是数学上的特殊情况(除零),需最先处理
    • 整数除法语义s / t 表示已完整吃完的苹果数(向下取整)
    • 余数判断完整性s % t == 0 表示时间恰好用完,无正在吃的苹果;否则有一个正在被吃的不完整苹果
    • 完整苹果定义:"完整"意味着未被咬过,正在吃的那个即使只咬了一口也不算完整
    • 适用于时间计算、资源消耗、边界处理类入门问题

【算法标签】

入门 #模拟

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    int m, t, s, ans;     // 定义变量:m(总苹果数), t(吃一个苹果的时间), s(总时间), ans(剩余苹果数)
    cin >> m >> t >> s;   // 输入三个参数

    // 条件判断处理不同情况
    if (t == 0)
    {
        // 情况1:吃一个苹果时间为0(特殊情况处理)
        ans = 0;
    }
    else if(s / t >= m)
    {
        // 情况2:时间足够吃完所有苹果
        ans = 0;
    }
    else if (s % t == 0)
    {
        // 情况3:时间刚好吃完整数个苹果
        ans = m - s / t;
    }
    else
    {
        // 情况4:时间不足以吃完下一个完整苹果
        ans = m - s / t - 1;
    }

    cout << ans;          // 输出剩余苹果数
    return 0;             // 程序正常结束
}

【运行结果】

50 10 200
30
posted @ 2026-08-05 15:46  团爸讲算法  阅读(33)  评论(0)    收藏  举报