2020牛客寒假算法基础集训营5 D题
D-牛牛与牛妹的约会
牛牛和牛妹的约会在今天啦~
这个题目是一个简单的贪心,但是我要把这个题目分类到精度问题中qaq,因为我精度这个地方卡了很久耶=-=
题目大概意思就是牛牛和牛妹要在2.14约会啦~然后他们都在水平的x轴上,给出牛牛和牛妹的坐标,然后两种策略,第一种是直接到达pow(x, 1/3)(我们假设牛牛的地点是x),这种策略将会花费1个单位的时间;第二种策略就是以速度1个单位距离/1个单位的时间靠近牛妹,问牛牛到达牛妹的位置的最短时间
解题思路就是模拟两种策略哪种前进的更快就可以啦~我们可以发现,如果某一次使用了策略2的话,其实策略1就不会被用到了,所以我们循环的时候判断如果用的策略2,就可以直接break了。
这里要重点强调pow()函数的使用,pow(a, b)函数内部定义中不允许a为负数,我的天,如果底数是负数的话,pow()函数会有很奇怪的东西,所以避免wa,如果遇到负数的底数,我们先把它变为正数,做完pow()运算后,再取反,会避免一些不必要的麻烦啦~强调强调!!!
上代码啦~
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
double ans = 0;
double a, b;
scanf ("%lf%lf", &a, &b);
double t = 1.0 / 3.0;
double t1;
while (1)
{
if (a < 0)
{
t1 = -pow(-a, t);
}
else
{
t1 = pow(a, t);
}
if (abs(t1 - b) < abs(a - b) - 1)
{
ans += 1.0;
a = t1;
}
else
{
ans += abs(a - b);
break;
}
}
printf ("%.9f\n", ans);
}
return 0;
}
白白~~