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:
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 ); } }
相关文章推荐
- poj 1922 Ride to School
- poj 1922 Ride to School
- (简单模拟2.1.2)POJ 1922 Ride to School(求最小值)
- Ride to School(POJ 1922)
- POJ 1922:Ride to School 【水】
- POJ1922-Ride To School (C语言实现)
- Ride to School - POJ 1922 水题
- POJ:1922 Ride to School
- POJ 1922 Ride to School(贪心+模拟)
- POJ 1922 - Ride to School
- POJ - 1922-Ride to School (思维题)
- POJ 1922 Ride to School
- POJ 1922:Ride to School:水题练java
- POJ-1922 Ride to School
- POJ 1922 Ride to School
- POJ 1922 Ride to School
- poj 1922 Ride to School
- POJ 1922 Ride to School#贪心
- POJ1922 Ride to School
- POJ 1922 Ride to School 简单模拟