1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include<bits/stdc++.h> using namespace std; #define int long long int qpow(int a,int b) { if(b==0)return 1; int t=qpow(a,b/2); if(b%2==0)return t*t; else return t*t*a; } int dis(int k,int x,int y) { if(k==0)return 1; int len=qpow(3,k); int step=qpow(3,2*k-2); if(x<len/3) { if(y<len/3)return dis(k-1,x,y); else if(y<2*len/3)return step+dis(k-1,len/3-1-x,y-len/3); else return 2*step+dis(k-1,x,y-2*len/3); } else if(x<2*len/3) { if(y<len/3)return 5*step+dis(k-1,x-len/3,len/3-1-y); else if(y<2*len/3)return 4*step+dis(k-1,2*len/3-1-x,2*len/3-1-y); else return 3*step+dis(k-1,x-len/3,len-1-y); } else { if(y<len/3)return 6*step+dis(k-1,x-2*len/3,y); else if(y<2*len/3)return 7*step+dis(k-1,len-1-x,y-len/3); else return 8*step+dis(k-1,x-2*len/3,y-2*len/3); } } signed main() { int k,x1,Y1,x2,y2; cin>>k>>x1>>Y1>>x2>>y2; if(k>=40)k=39; cout<<abs(dis(k,x1,Y1)-dis(k,x2,y2)); return 0; }
|