Pagini recente » Cod sursa (job #3255858) | Cod sursa (job #3268455) | Cod sursa (job #3289298) | Cod sursa (job #3242067) | Cod sursa (job #3250137)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("fractal.in");
ofstream fout("fractal.out");
int n,lin,col,p;
pair <int,int> sol;
pair <int,int> labirint(int pt)
{
int latura=(1<<(pt-1)),raport;
raport=(p-1)/(latura*latura);
p=p-raport*latura*latura;
if (raport==0)
{
if (pt==1)
return{1,1};
pair<int,int> b=labirint(pt-1);
return {b.second, b.first};
}
if (raport==1)
{
if (pt==1)
return {2,1};
pair<int,int> b=labirint(pt-1);
return {latura+b.first,b.second};
}
if (raport==2)
{
if (pt==1)
return {2,2};
pair<int,int> b=labirint(pt-1);
return {latura+b.first,latura+b.second};
}
if (raport==3)
{
if (pt==1)
return {1,2};
pair<int,int> b=labirint(pt-1);
return {latura-b.second+1,2*latura-b.first+1};
}
}
int main()
{
fin>>n>>lin>>col;
swap(lin,col);
// cout<<n<<" "<<lin<<" "<<col<<endl;
for (int i=1; i<=(1<<(2*n)); i++)
{
p=i;
sol=labirint(n);
if (sol.first==lin && sol.second==col)
{
fout<<i-1;
return 0;
}
}
return 0;
}