Pagini recente » Cod sursa (job #2535123) | Cod sursa (job #1140306) | Cod sursa (job #640637) | Cod sursa (job #1443911) | Cod sursa (job #2487457)
#include <iostream>
#include <bits/stdc++.h>
#define ll long long int
#define pb push_back
using namespace std;
int k,c,b;
typedef struct
{
int x,y;
}punct;
int a[3][3],a_st[3][3],a_dr[3][3];
ll p;
int fractal(ll pow,int k,punct prim)
{
if(k==1)
{
return a[prim.x][prim.y];
}
else//k>1
{
ll p,q;
p=pow>>1;
q=1<<(k-1);
k--;
if(prim.x<=p && prim.y<=p)// 1
{
return fractal(p,k,prim);
}
else if(prim.x>=p && prim.y<=p)//2
{
prim.x-=p;
return q+fractal(p,k,prim);
}
else if(prim.x>=p && prim.y>=p)//3
{
prim.x-=p;
prim.y-=p;
return 2*q+fractal(p,k,prim);
}
else//4
{
return 3*q+fractal(p,k,prim);
}
}
}
int main()
{
ifstream fin("fractal.in");
ofstream fout("fractal.out");
punct prim;
fin>>k>>c>>b;
if(k==1 && c==1 && b==1)
{
fout<<0; return 0;
}
prim.x=c;
prim.y=b;
ll p;
p=1<<k;
//Matricea pentru fractal de ordin 1
a[1][1]=1;
a[2][1]=2;
a[2][2]=3;
a[1][2]=4;
//Matricea pentru fractal de ordin 1 rotit la 90 de grade la stanga
a_st[1][1]=1;
a_st[2][1]=4;
a_st[2][2]=3;
a_st[1][2]=2;
//Matricea pentru fractal de ordin 1 rotit la 90 de grade la dreapta
a_dr[1][1]=3;
a_dr[2][1]=2;
a_dr[2][2]=1;
a_dr[1][2]=4;
fout<<(fractal(p,k,prim)-1);
fin.close();
fout.close();
return 0;
}