AcWing 98. 分形之城
原题链接
困难
作者:
auto_teral
,
2024-12-09 18:34:49
,
所有人可见
,
阅读 1
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PII;
PII get(LL n, LL m)
{
if (n == 0) return {0,0};
LL len = 1ll << (n - 1), idx = 1ll << 2 * (n - 1);// 不加ll会爆,血的教训
auto p = get(n - 1, m % idx); // m%idx表示当前街道在上一级中的编号
LL x = p.first, y = p.second;
LL z = m / idx; //算当前街道在哪一个区域
if (z == 0) return {y, x};
if (z == 1) return {x, y + len};
if (z == 2) return {x + len, y + len};
return {2 * len - y - 1, len - x - 1};
}
int main()
{
int t;
cin >> t;
while (t --)
{
LL n, a, b;
cin >> n >> a >> b;
auto ac = get(n, a - 1);
auto bc = get(n, b - 1);
double x = ac.first - bc.first, y = ac.second - bc.second;
printf("%.0f\n", sqrt(x * x + y * y) * 10);
}
return 0;
}