Pagini recente » Cod sursa (job #2549196) | Cod sursa (job #1023146) | Cod sursa (job #284959) | Cod sursa (job #1520466) | Cod sursa (job #2424919)
#include <bits/stdc++.h>
using namespace std;
int szz[100];
int getpos(int r, int c, int k)
{
// cout<<k<<" : "<<r<<" "<<c<<"\n";
if(k == 1)
{
if(r == 1 && c == 1)
return 1;
if(r == 2 && c == 1)
return 2;
if(r == 2 && c == 2)
return 3;
if(r == 1 && c == 2)
return 4;
return -1;
}
int sz = (1 << (k - 1));
if(c <= sz)
{
if(r <= sz)
{
return szz[k - 1] - getpos(c, sz + 1 - r, k - 1) + 1;
}
else
{
return getpos(r - sz, c, k - 1) + szz[k - 1];
}
}
else
{
if(r <= sz)
{
return szz[k - 1] - getpos(2 * sz + 1 - c, r, k - 1) + 1 + 3 * szz[k - 1];
}
else
{
return getpos(r - sz, c - sz, k - 1) + 2 * szz[k - 1];
}
}
}
int main()
{
freopen("fractal.in", "r", stdin);
freopen("fractal.out", "w", stdout);
szz[1] = 4;
for(int i = 2; i < 100; i++)
{
szz[i] = szz[i - 1] * 4;
}
int k, r, c;
cin >> k >> r >> c;
cout << getpos(c, r, k) - 1 << "\n";
return 0;
}