admin管理员组

文章数量:1612098

Description
一个人在跑步,给出其在n个位置的时刻,每两个相邻位置之间这个人速度恒定,忽略加速的时间,问这个人最大速度
Input
第一行为一整数T表示用例组数,每组用例第一行为一整数n,之后n行每行两个整数xi和ti表示这个人在xi时的时刻(2<=n<=10000,0<=xi,ti<=10^6)
Output
对于每组用例,输出这个人的最大速度
Sample Input
2
3
2 2
1 1
3 4
3
0 3
1 5
2 0
Sample Output
Case #1: 2.00
Case #2: 5.00
Solution
简单题,对xi升序排,更新(x[i]-x[i-1])/(t[i]-t[i-1])的最大值即可
Code

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 11111
#define INF 0x3f3f3f3f
typedef long long ll;
struct node
{
    int t,x;
}p[maxn];
int T,n;
int cmp(node a,node b)
{
    if(a.t!=b.t)return a.t<b.t;
    return a.x<b.x;
}
int main()
{
    scanf("%d",&T);
    int res=1;
    while(T--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)scanf("%d%d",&p[i].t,&p[i].x);
        sort(p,p+n,cmp);
        double ans=0;
        for(int i=1;i<n;i++)ans=max(ans,abs(1.0*(p[i].x-p[i-1].x)/(p[i].t-p[i-1].t)));
        printf("Case #%d: ",res++,ans);
        printf("%.2lf\n",ans);
    }
    return 0;
}

本文标签: hduMattcurious