AcWing 98. 分形之城

 

 

#include <bits/stdc++.h>
#define ll long long
#define PII pair<int,int> 
#define PLL pair<ll,ll> 
using namespace std;
PLL calc(int n,ll m) 
{
    if (n==0)return {0,0};
    ll len=1ll<<(n-1),cnt=1ll<<(2*n-2);
    PLL pos=calc(n-1,m%cnt);
    ll x=pos.first, y=pos.second;
    ll z=m/cnt;
    if(z==0)return{y,x};
    if(z==1)return{x,y+len};
    if(z==2)return{x+len,y+len};
    if(z==3)return{2*len-y-1,len-x-1};
}
int main() 
{
    int t;
    cin>>t;
    while(t--) 
    {
        ll n,a,b;
        cin>>n>>a>>b;
        PLL ac=calc(n,a-1);
        PLL bd=calc(n,b-1);
        double x=ac.first-bd.first;
        double y=ac.second-bd.second;
        printf("%.0lf\n", sqrt(x*x+y*y)*10);
    }
    return 0;
}

 

posted @ 2021-01-22 16:44  君与  阅读(49)  评论(0编辑  收藏  举报