POJ 2673 模拟题一定要注意各种特殊情况 !!!

http://poj.org/problem?id=2673

题目描述:一个人有t秒时间,每秒能干x量的工作。有m只动物,开始时,第i只动物离人有di的距离,它的速度是si每秒。只要人干活,动物就朝人走,如果不干活,动物就原路返回。

要求动物不能达到人,问人最多能干多少工作。

解题报告:

首先得到最先到达人的动物的时间,记下这个时间减一记作re,所以人第一次停止工作是在re 1秒的时候。

所以,如果re == 0,工作量只能是0.

如果re >= t,那人就不用停止工作,工作量最大:t * x。

最后,re < t,首先人能工作re的时间,剩下的时间可以认为休息1秒(同时动物往回跑一秒),然后工作一秒,所以剩下的时间平分就是工作时间。答案 (re (t - re) / 2) * x

 
  
#include < iostream >
using namespace std;
int main(){
int t,x,m;
int d,s;
int temp,min = 1000000000 ;
int allTime;
cin
>> t >> x >> m;
while (m -- ){
scanf(
" %d%d " , & d, & s);
// 凡是有除法的运算,都要处理除数等于零时的情况
if (s == 0 ) continue ;
if (d % s == 0 )temp = d / s - 1 ;
else temp = d / s;
if (min > temp)min = temp;
}
if (t >= min)
allTime
= min + (t - min) / 2 ;
// 特殊情况1,人可以一直工作,即min>t的情形
else allTime = t;
// 特殊情况2
if (min == 0 )allTime = 0 ;
cout
<< x * allTime << endl;
return 0 ;
}


转载于:https://www.cnblogs.com/liushang0419/archive/2011/05/05/2037775.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值