求解问题上学~偏水题

题目描述

北京大学的许多研究生都住在距离主校区燕园4.5公里的万柳校区。万流的学生不得不乘坐公共汽车或骑自行车上学。由于北京交通不畅,许多学生选择骑自行车。 

我们可以假设除“查利”以外的所有学生都以固定的速度从万流到盐源。查理是一名具有不同骑行习惯的学生 - 他总是试图跟随另一名骑手来避免单独骑马。当查理走到万流的大门时,他会寻找一个正在出发到盐源的人。如果他找到某人,他会跟随那个骑手,或者如果没有,他会等待某人跟随。在从万柳到燕园的路上,任何时候如果一个更快的学生超过查理,他会随时离开他跟随的车手并加速追赶更快的车手。 

我们假设查理进入万流门的时间为零。考虑到其他学生的出发时间和速度,你的任务是给Charley到达盐源的时间。 

输入

有几个测试用例。每种情况的第一行是N(1 <= N <= 10000),表示车手数量(不包括Charley)。N = 0结束输入。以下N行是N个不同车手的信息,格式如下:  
Vi [TAB] 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 <cmath>
using namespace std;
int main(){
	int i=0,j=0;
	double n,t,t0,v,tt;
	while(cin>>n){
		if(n==0) break;
		t=4.5*3600;
		for(j=0;j<n;j++){
			cin>>v>>t0;
			if(t0<0) continue;
			tt=4.5/v*3600+t0;
			if(tt<t) 
			t=tt;
		}
		cout<<ceil(t)<<endl; 
	}
	return 0;
}/*
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int t,i;
    double j,k;
    while(cin>>t,t!=0)
    {
	    double a,b;
        j=4.5*3600;
        for(i=0;i<t;i++)
        {
		    cin>>a>>b;
            if(b<0)continue;
            k=4.5/a*3600+b;
            if(k<=j)
            j=k;
        }
        cout<<ceil(j)<<endl;
    }
    return 0;
}*/

猜你喜欢

转载自blog.csdn.net/qq_41486817/article/details/80617218