链接:https://ac.nowcoder.com/acm/contest/3006/D
来源:牛客网
题目描述
牛牛在辛苦的一天的比赛之后,要去找牛妹玩,其实牛妹那天也在比赛。他为了找到牛妹,要尽快的从自己的比赛地到她的比赛地。
还记得吗,比赛地都是只在xx轴上的,所以两个人的坐标都满足y=0y=0。牛牛除了可以以11单位距离/单位时间的速度移动任意时间以外,还可以花费11单位时间进行闪现。每次闪现时,如果当前他的坐标是x=kx=k,他将闪现到x=\sqrt[3]{k}x=
3
k
的位置。
请帮他算算,最短需要多少时间,他可以找到牛妹~
输入描述:
输入数据包括多组用例,输入第一行包含一个数字T(1 \leq T \leq 5 \times 10^5)T(1≤T≤5×10
5
),表示数据组数。
接下来TT行,每行包括两个整数a,b(|a|,|b|\leq 10^6)a,b(∣a∣,∣b∣≤10
6
),表示牛牛所在的位置和牛妹所在的位置。
输出描述:
输出共TT行,每行包括一个实数,表示牛牛所花费的最短时间。
如果你的答案是aa,标准答案是bb,当|a-b|\leq 10^{-6}∣a−b∣≤10
−6
时,你的答案将被判定为正确。
示例1
输入
复制
2
3 -1
1 2
输出
复制
3.442249570
1.000000000
#include<stdio.h>
#include<math.h>
int main()
{
int t;
double a,b;
scanf("%d", &t);
while(t--)
{
scanf("%lf%lf", &a,&b);
double x=a;
double y=b;
double q=1.0/3.0;
double ans=0;
double k=fabs(a-b);
while(1)
{
if(a<0)
{
x=-pow(-a,q);
}
else
{
x=pow(a,q);
}
if(fabs(a-b)-1>fabs(x-b))/*这个式子两个作用,其一是来判断这一步
是闪现
还是一步走快,取其快,一旦一步一步走快,后面的路都是一步走快(细品),如果闪现快,就
判断下一步;第二个
作用是否到达终点,一旦到达,就结束循环;*/
{
ans++;
a=x;
}
else
break;
}
ans+=fabs(a-b);
printf("%.8f\n", ans);
}
}