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;
}