POJ3619-Speed Reading

大致题意:

 在一次阅读大赛中,有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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值