大致题意:
在一次阅读大赛中,有K(1<=K<=1000)名选手,选手们所需要读的书总共有N(1<=N<=100000)页。每名选手每分钟的读书速度为S(1<=S<=100),一口气可以连续读书的最长时间为T(1<=T<=100),R(1<=R<=100)代表选手每连读一段时间后必须要休息的时间。求解读完N页书需要的最短时间(四舍五入到最近分钟)。
解题思路:
又是理解完题意后的水题一道(深入读题很重要啊)。我们可以用分治的思想把所求的最短时间分解成两部分,用t1表示总共在读书的时间,用t2表示总共在休息的时间,既所求的最短时间Tmin=t1+t2。t1比较好求,用总页数除读书速度即可,结果需向上取整处理。t2用休息时间乘休息次数即可。而中间的休息次数n为总读书时间除每次连读的最大时间结果向上取整-1即可。
解题代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int page,line,s,t,r,t1,n;
cin>>page>>line;
while(line--)
{
cin>>s>>t>>r;
t1=ceil(page/(s*1.0)); //求出t1的时间,结果需要向上取整。
n=ceil(t1/(t*1.0))-1; //n表示读完全书需要休息的最短次数,结果需向上取整-1
cout<<t1+n*r<<endl; //输出t1+t2既所用的最短时间
}
return 0;
}
Sample Input:
10 3
2 4 1
6 1 5
3 3 3
Sample Output:
6
7
7