『题解』Luogu P5707 【深基2.例12】上学迟到
题目大意
yyy 的学校要求早上 \(8\) 点前到达。学校到 yyy 的家一共有 \(s(s\le10000)\) 米,而 yyy 可以以 \(v(v\le10000)\) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 \(10\) 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM
的时间格式,不足两位时补零。由于路途遥远,yyy 可能不得不提前一天出发,不过不可能提前超过一天。
思路
题目说明了时间可能是前一天,但不超过前一天的 \(0\) 点,
我们可以用一个变量 minute
表示从前一天的 \(0\) 点到当前天的 \(8\) 点的分钟数,然后 minute
要减去路上的垃圾分类时间 \(10\) 分钟,还要减去向上取整的走路时间,向上取整前要先将 \(s\) 乘 \(1.0\),再除以 \(v\),转换成 \(double\) 类型再取整,就是得数了。要注意,输出小时的时候要先除以 \(60\),取小时数,再 \(\bmod 24\),因为可能出发时间再前一天。
代码
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main(){
int s,v,minute;
cin >> s >> v;
minute=((24+8)*60)-(ceil(1.0*s/v)+10);
cout << setfill('0') << setw(2) << (minute/60)%24 << ":" << setw(2) << minute%60 << endl;
return 0;
}