您的位置:首页 > 其它

POJ 1922 Ride to School

2015-03-02 22:36 441 查看
题目描述:

    Charley想要从起点到达终点,路程是4.5km,这一过程必须和另外一个人同行,假设有n个人要走这段路程,他们分别在不同的时间出发,匀速行驶。在同行的过程中如果有人从旁边经过,Charley 就会跟速度较快的那个人同行,求到达终点所需的最短时间。
算法分析:

    以n个人中第一个出发的那个为原点,出发时间为0,其他人的出发时间都以第一个出发的人为参照物,由于是和第一个出发的人同时出发,如果后面的人在晚出发的情况下能追上前面的两个人,肯定这个人的速度更快,即选择与此人同行,因此在这n+1个人中,Charley总是离目的地最近的,根据出发时间和速度计算出最先到达的那个人的到达时间就是Charley到达终点的最短时间。

    题目中路程单位是km,速度单位是km/h,而给出的时间单位是s,要注意单位的转换。

Code:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 10000 + 10;
struct rider
{
double v;
double st;  //出发时间
double et;  //到达时间
};
rider r[maxn];
int cmp( rider a, rider b )
{
return a.et < b.et;
}
int main()
{
int n;
while( scanf( "%d", &n ), n )
{
for( int i = 0; i < n; i++ )
{
scanf( "%lf%lf", &r[i].v, &r[i].st );
if( r[i].st < 0 )
r[i].et = 99999999;
else
r[i].et = r[i].st + 4.5 * 3600 / r[i].v;
}
sort( r, r + n, cmp );
int ans = r[0].et > (int) r[0].et ? (int) ( r[0].et + 1 ) : (int) r[0].et;
printf( "%d\n", ans );
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: