信息学奥赛一本通 Ride To Office

7 篇文章 0 订阅
1 篇文章 0 订阅

题目描述

起点与终点相隔4500米。现Charley需要从起点骑车到终点。但是,他有个习惯,沿途需要有人陪伴,即以相同的速度,与另外一个人一起骑。而当他遇到以更快的速度骑车的人时,他会以相应的速度跟上这个更快的人。先给定所有与Charley同路的人各自的速度与出发时间,问Charley以这种方式跟人,骑完4500米需要多少时间。得出的结果若是小数,则向上取整

输入

输入若干组数据,每组数据第一行n(1<=n<=10000),n为0,表示输入结束,接着输入n行数据,每行2个数据,表示速度v和出发时间t,如果t<0,表示陪伴人提早出发了。

输出

输出对应若干行数据,每行输出1个数,表示最快到达的时间。

输入样例

4
20 0
25 -155
27 190
30 240
2
21 0
22 34
0

输出样例

780
771

题目分析

以陪跑为0的时间为参考时间,所用的时间一定等于陪跑的时间,陪跑时间越短所用时间越短,以陪跑为中心。
分析:t<0的陪跑 如果可以与t<0的陪跑相遇,说明t<0的陪跑速度慢,如果t<0的陪跑的速度快,则永远都不可能追上,即永远不可能相遇,所以t<0的陪跑为干扰项,如果t>0的陪跑在以t=0的陪跑的参考时间下速度快,那么说明整体所用的时间比t=0的时间短,所以取t>=0中最短的时间即为所求。
(注意:题目中所给的路程为“米”,速度为“千米每小时” 1 m / s = 3.6 k m / h 1 m/s=3.6 km/h 1m/s=3.6km/h

代码

#include<iostream>
using namespace std;
int main(void){
	int n;
	while(cin>>n&&n){
		int x=4500;
		float v,t,Min=0;
		for(int i=0;i<n;i++){
			cin>>v>>t;
			if(t<0)
				continue; 
			t+=(x*3.6)/v;  //路程的单位为米 速度为km/h *3.6单位转换 
			if(t<Min||Min==0)
				Min=t;
		}
		if(Min>(int)Min)
			cout<<(int)Min+1<<endl;
		else
			cout<<Min<<endl;	
	}
	return 0;
} 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值