Pagini recente » Cod sursa (job #1675758) | Cod sursa (job #3260234) | Cod sursa (job #2092593) | Cod sursa (job #246358) | Cod sursa (job #2643680)
#include<bits/stdc++.h>
#define KMAX 17
#define ll long long
using namespace std;
ll lg[KMAX];
int k,x,y;
void rotateRight(int &x, int &y, int mid){
int y2 = x;
int x2 = mid - y + 1;
x = x2;
y = y2;
}
ll solve(int k,int x,int y){
int mij = 1<<(k-1);
if (k == 1){
if (x == 1 && y == 1) return 0;
if (x == 1 && y == 2) return 1;
if (x == 2 && y == 2) return 2;
return 3;
}
if (x <= mij && y <= mij){
rotateRight(x,y,mij);
return lg[k-1] - solve(k-1,x,y);
}
if (x <= mij){
return lg[k-1] + 1 + solve(k-1, x, y - mij);
}
if (y > mij){
return 2 * lg[k-1] + 2 + solve(k-1, x - mij, y - mij);
}
x -= mij;
rotateRight(x,y,mij);
rotateRight(x,y,mij);
rotateRight(x,y,mij);
return 3 * lg[k-1] + 3 + lg[k-1] - solve(k-1, x, y);
}
int main(){
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
cin >> k >> x >> y;
lg[1] = 3;
for (int i=2;i<=k;i++){
lg[i] = lg[i-1] * 4 + 3;
}
cout << solve(k, x, y);
return 0;
}