Pagini recente » Cod sursa (job #3281298) | Diferente pentru propuneri/6-arhiva-educationala intre reviziile 4 si 16 | Cod sursa (job #2950268) | Cod sursa (job #19261) | Cod sursa (job #2739631)
#include <iostream>
#define swap(a,b) {a+=b; b=a-b; a=a-b;}
using namespace std;
long long S=0, k, Lines=0, Center=1;
int Cadran,x,y;
void getCadran()
{
if(x<=Center)
{
if(y<=Center)
Cadran=1;
else
Cadran=4;
}
else
if(y<=Center)
Cadran=2;
else
Cadran=3;
}
getNewCoordinates()
{
switch(Cadran)
{
case 1:
swap(x,y);
break;
case 2:
x-=Center;
break;
case 3:
x-=Center;
y-=Center;
break;
case 4:
y-=Center;
if(x+y!=Center+1)
{
x=Center-x+1;
y=Center-y+1;
}
break;
}
Center/=2;
}
int main()
{
cin>>k>>y>>x;
for(int i=1;i<k;i++)
{
Lines = Lines*4+3;
Center*=2;
}
while(k!=1)
{
getCadran();
S+=(Lines+1)*(Cadran-1);
getNewCoordinates();
Lines/=4;
k--;
}
switch(x)
{
case 1:
if(y==1)
S+=0;
else
S+=3;
break;
case 2:
if(y==1)
S+=1;
else
S+=2;
break;
}
cout<<S;
return 0;
}