Pagini recente » Cod sursa (job #1786748) | Cod sursa (job #1803789) | Cod sursa (job #834332) | Cod sursa (job #2667697) | Cod sursa (job #500027)
Cod sursa(job #500027)
#include <stdio.h>
#include <fstream>
using namespace std;
const char IN[]="fractal.in",OUT[]="fractal.out";
//const char IN[]="hilbert.in",OUT[]="hilbert.out";
typedef unsigned long long ull;
int K,x,y;
int Hi[20];
void InitializeH(int *H)
{
int i;
H[0]=0;
for (i=1;i<18;i++)
H[i]=H[i-1]*4+3;
}
ull Hilbert(int n,int x,int y)
{
if (n<=0 || n>15) return 0;
if ( x <= ( 1<<(n-1) ) )
{
if ( y<= (1<<(n-1) ) )
return Hilbert(n-1,y,x);
return 1+Hi[n-1]+Hilbert(n-1,x,y-(1<<(n-1)));
}
if ( y<= (1<<(n-1)))
return 3+3*Hi[n-1]+Hilbert(n-1,x-(1<<(n-1)),y);
return 2+2*Hi[n-1]+Hilbert(n-1,x-(1<<(n-1)),y-(1<<(n-1)));
}
int main()
{
InitializeH(Hi);
freopen(IN,"r",stdin);
scanf("%d%d%d",&K,&x,&y);
fclose(stdin);
ofstream fout(OUT);
fout<<Hilbert(K,x,y);
fout.close();
return 0;
}