题解:洛谷 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
【核心思想】
-
问题分析:给定 \(m\) 个苹果,吃一个需 \(t\) 分钟,经过 \(s\) 分钟后求剩余完整苹果数。需处理边界情况:\(t=0\)(瞬间吃完)、刚好吃完整数个、正在吃一个但未吃完。
-
算法选择:
- 分类讨论:根据 \(t\) 是否为 \(0\)、\(s/t\) 与 \(m\) 的关系、\(s \bmod t\) 是否为 \(0\) 分四种情况计算
-
关键步骤:
- 读入数据:
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$
- \(t = 0\):吃苹果时间为 0,瞬间吃完所有,
- 输出结果:
cout << ans
- 读入数据:
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),常数次算术运算和判断
- 空间复杂度:\(O(1)\),仅需常数个变量
-
分类讨论的核心思想:
- 边界优先:\(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
浙公网安备 33010602011771号