信息学奥赛一本通--1227:Ride to Office

该博客讨论了一个关于Charley骑车跟随其他人的问题,其中Charley会与速度最快的人一起到达终点。输入数据包括同行人的速度和出发时间,算法采用贪心策略,寻找最快到达终点的时间。程序通过读取输入数据,计算每个同行者到达终点的时间,并更新最快时间。最后输出最快到达时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目描述】
起点与终点相隔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

算法:贪心

这题非常的巧妙,一开始看到时候就头疼,这模拟也太难了吧,后来就去睡觉了,然后在干这题时,已经晚上了,去看了下别人的博客,发现是真的的巧妙,因为这个人一定是走最快的人跑的,也就说明,他一定会和最快到达终点使的人一起到达终点,当然也要注意提前跑的人肯定是不管的,想想如果要追上他,那么一定要速度比他快,怎么可能跟他一起走。
哎,贪心就是这么的难搞。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int n;
	while(cin>>n, n)
	{
		int minn = 0x3f3f3f3f;
		for(int i=0; i<n; i++)
		{
			int t,v;
			cin>>v>>t; 
			
			if(t < 0 ) continue;  
			
			int T = ceil(4500 * 3.6 / v + t);  //速度的转换 
			if(minn > T) minn = T; 
		}
		
		cout<<minn<<endl;
	}
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值