分形之城
98. 分形之城 - AcWing
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> PII;
const int N=1e5+5;
PII cal(ll n,ll m){
if(n==0) return {0,0};
ll len=(ll)1<<(n-1);//n-1级的边长
ll cnt=len*len;//n-1级有多少方块
PII t=cal(n-1,m%cnt);//对所处在的n-1级递归,得到在n-1级里的坐标
int z=m/cnt;//所在的n-1级块的编号
ll x=t.first,y=t.second;
if(z==0) return {-y-len,-x+len};
if(z==1) return {x+len,y+len};
if(z==2) return {x+len,y-len};
if(z==3) return {y-len,x-len};
}
int main(){
int t;cin>>t;
while(t--){
ll n,a,b;cin>>n>>a>>b;
PII ac=cal(n,a-1);
PII bc=cal(n,b-1);
double x=ac.first-bc.first,y=ac.second-bc.second;
printf("%.0lf\n",sqrt(x*x+y*y)*5);
}
}