Pagini recente » Diferente pentru problema/algoritm intre reviziile 78 si 80 | Cod sursa (job #1322598) | Cod sursa (job #1870009) | Cod sursa (job #2434179) | Cod sursa (job #1110377)
#include <cstdio>
#include <cstdint>
#include <algorithm>
using namespace std;
int main()
{
int64_t a,s=0,a2;
int k,x,y,cx;
freopen ("fractal.in","r",stdin);
freopen ("fractal.out","w",stdout);
scanf("%d %d %d",&k,&y,&x);
a=1<<k;
while(k)
{
a2=a/2;
if(x>a2 && y>a2)
{
x-=a2;y-=a2;
s+=2*(1<<(k-1)*2);
}
else if(x<=a2 && y<=a2)
{
swap(x,y);
}
else if(x>a2 && y<=a2)
{
x-=a2;
s+=1<<(k-1)*2;
}
else if(x<=a2 && y>a2)
{
cx=x;x=a-y+1;
y=a2-cx+1;
s+=3*(1<<(k-1)*2);
}
a>>=1;
k--;
}
printf("%I64d",s);
return 0;
}