链接:https://ac.nowcoder.com/acm/contest/3006/D
牛牛在辛苦的一天的比赛之后,要去找牛妹玩,其实牛妹那天也在比赛。他为了找到牛妹,要尽快的从自己的比赛地到她的比赛地。
还记得吗,比赛地都是只在xx轴上的,所以两个人的坐标都满足y=0y=0。牛牛除了可以以11单位距离/单位时间的速度移动任意时间以外,还可以花费11单位时间进行闪现。每次闪现时,如果当前他的坐标是x=kx=k,他将闪现到x=\sqrt[3]{k}x=3k的位置。
请帮他算算,最短需要多少时间,他可以找到牛妹~
输入描述:
输入数据包括多组用例,输入第一行包含一个数字T(1 \leq T \leq 5 \times 10^5)T(1≤T≤5×105),表示数据组数。
接下来TT行,每行包括两个整数a,b(|a|,|b|\leq 10^6)a,b(∣a∣,∣b∣≤106),表示牛牛所在的位置和牛妹所在的位置。
输出描述:
输出共TT行,每行包括一个实数,表示牛牛所花费的最短时间。
如果你的答案是aa,标准答案是bb,当|a-b|\leq 10^{-6}∣a−b∣≤10−6时,你的答案将被判定为正确。
示例1
输入
复制
2 3 -1 1 2
输出
复制
3.442249570 1.000000000
没想到被pow坑了,隐约记得曾经也被坑过,下次一定不能再掉进坑里了
代码:
#include<bits/stdc++.h>
using namespace std;
long long t,n,m,r;
double a;
long long b;
double s,k;
int main()
{
cin>>t;
while(t--)
{
cin>>a>>b;
//cout<<pow(-1,1.0/3);
s=0;
if(a<0)
{
a=-a;
b=-b;
}
while(fabs(a-1.0*b)>fabs(pow(a,1.0/3)-1.0*b)+1)
{
a=pow(a,1.0/3);
//cout<<-1<<endl;
s+=1;
}
//k=pow(a,1.0/3);
s+=fabs(a-b);
printf("%.9lf\n",s);
}
}