Pagini recente » Cod sursa (job #409365) | Cod sursa (job #552795) | Cod sursa (job #2671836) | Cod sursa (job #138807) | Cod sursa (job #51015)
Cod sursa(job #51015)
#include <fstream>
#include <iostream>
int k,x,y;
void rot(int m[2][2], int r) {
int i,aux;
r=r%4+(r<0?4:0);
for (i=0; i<r; i++) {
aux=m[0][0];
m[0][0]=m[1][0];
m[1][0]=m[1][1];
m[1][1]=m[0][1];
m[0][1]=aux;
}
}
int nrp(int k,int x,int y,int m[2][2],int r) {
int cx,cy,p,m2[2][2];
for (cx=0; cx<2; cx++)
for (cy=0; cy<2; cy++)
m2[cx][cy]=m[cx][cy];
rot(m2,r);
//sx=s%2; sy=(s/2)%2;
cx=x/(1<<(k-1));
cy=y/(1<<(k-1));
p=m2[cy][cx];
//std::cout << "k=" << k << " x=" << x << " y=" << y << " r=" << r << " p=" << p << "\n";
if (k==1) return p;
rot(m2,-r);
if (p==0||p==3) {
if (m2[0][0]==0) {
if (p==0) r--; else r++;
m2[0][0]=3; m2[0][1]=0; m2[1][0]=2; m2[1][1]=1;
} else {
if (p==0) r++; else r--;
m2[0][0]=0; m2[0][1]=3; m2[1][0]=1; m2[1][1]=2;
}
}
return p*(1<<(k-1))*(1<<(k-1))+nrp(k-1,x-cx*(1<<(k-1)),y-cy*(1<<(k-1)),m2,r);
}
int main () {
int i,tmp[2][2]={{0,3},{1,2}},max;
std::ifstream fin("fractal.in");
std::ofstream fout("fractal.out");
fin >> k >> x >> y;
//std::cout << nrp(k,x-1,y-1,tmp,0) << "\n";
fout << nrp(k,x-1,y-1,tmp,0) << "\n";
fin.close();
fout.close();
}