Pagini recente » Cod sursa (job #353672) | Cod sursa (job #825786) | Cod sursa (job #87859) | Cod sursa (job #1992493) | Cod sursa (job #1481175)
#include <fstream>
#include <iostream>
using namespace std;
int mat[5][3][3],v[16],p[16];
int k,x,y,i,c=1,sol;
void atr(int m[5][3][3],int v[16],int p[16])
{
m[1][1][1]=m[2][1][1]=m[3][1][1]=m[4][2][2]= 1;
m[1][1][2]=m[2][2][1]=m[3][2][1]=m[4][2][1]= 2;
m[1][2][2]=m[2][2][2]=m[3][2][2]=m[4][1][1]= 3;
m[1][2][1]=m[2][1][2]=m[3][1][2]=m[4][1][2]= 4;
v[1]=3;
p[0]=1;p[1]=2;
for(i=2;i<16;i++)
v[i]=v[i-1]*4+3,
p[i]=p[i-1]*2;
v[1]=4;
}
int cadr(int k,int x,int y)
{
if( x<p[k-1] && y<p[k-1] )
return 1;
if( x<p[k-1] && y>p[k-1] )
return 2;
if( y<p[k-1] )
return 3;
return 4;
}
int solve(int k,int x,int y)
{
while(k>1)
{
c=cadr(k,x,y);
k--;
sol+=(c-1)*v[k];
if(c==2)
y-=p[k];
else if(c==3)
x-=p[k],
y-=p[k];
else if(c==4)
x-=p[k];
}
return sol+mat[c][x][y];
}
int main()
{
ifstream f1("fractal.in");
ofstream f2("fractal.out");
f1>>k>>x>>y;
atr(mat,v,p);
f2<<solve(k,x,y)+1;
return 0;
}