骑车上课问题

来源:互联网 发布:csgo mac 编辑:程序博客网 时间:2024/03/28 19:21

描述

许多北大学生住在汪留校区,离主校区燕园4.5公里。汪留校区的学生要么乘公共汽车要么骑自行车去主校区上课。由于北京交通状况差,许多学生选择骑自行车。
可假设所有学生(除了“Charley” 以外),骑自行车从汪留到燕园的速度不变。Charley是一个有不同骑车习惯的学生―他总是试图跟在另一个骑自行车的人的后面,避免个人单独骑车走。当Charley骑到汪留的大门时,他就会找一个到燕园的人。如果找到了,他就跟在那人的后面;如果没有找到,他就会等待有这样一个人再走。在从汪留到燕园的路上,只要有一个更快的学生超过他,他就会离开那个先跟着的人,并加速跟着那个更快的人。
假定Charley到汪留门口的时间为0,给定出发时间和其他学生的速度,你的任务是给出Charley到燕园的时间。

输入

M个测试用例。每个测试用例的第一行是N(1<=N<=10000),表示骑自行车的人数(除Charley外)。N=0结束输入。接下来的N行是N个不同骑自行车的人的信息,格式为:
Vi Ti
Vi是一个小于或等于40的正整数,表示第i个人的骑车速度(kph,公里每小时),Ti是第i个人的出发时间,是一个整数,以秒计数。在每个测试用例中都保证总是存在一个非负数Ti

输出

每个测试用例输出一行:Charley的到达时间,对时间进行上取整,精确到秒。

样例输入

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

样例输出

780
771


#include<iostream>#include<cstdio>using namespace std;int main(){    int n,i,x;    float v,t,T,j,k;    while(scanf("%d",&n)!=EOF)    {        if(n==0)break;        for(i=1,j=0;i<=n;i++)        {            cin>>v>>t;            if(t<0)                continue;            v=v/3600;            T=4.5/v;            k=T+t;            if(j==0)                j=k;            else if(k<j)                j=k;            x=j*1000;            if(x%1000>=1)                j=x/1000+1;        }        cout<<j<<endl;    }    return 0;}


原创粉丝点击