作者:
fangy
,
2023-03-17 20:18:48
,
所有人可见
,
阅读 3
#include <iostream>
#include <cmath>
using namespace std;
typedef long long LL;
struct Point
{
LL x, y;
};
Point get(int n, LL id)
{
if (n == 0) return {0, 0};
LL block = 1ll << 2 * n - 2, len = 1ll << n - 1;
auto p = get(n - 1, id % block);
int x = p.x, y = p.y, z = id / block;
if (z == 0) return {y, x};
else if (z == 1) return {x, y + len};
else if (z == 2) return {x + len, y + len};
else return {2 * len - 1 - y, len - 1 - x};
}
int main()
{
int T;
cin >> T;
while (T--)
{
LL n, a, b;
scanf("%lld%lld%lld", &n, &a, &b);
Point pa = get(n, a - 1), pb = get(n, b - 1);
double dx = pa.x - pb.x, dy = pa.y - pb.y;
printf("%.0lf\n", sqrt(dx * dx + dy * dy) * 10);
}
return 0;
}