Pagini recente » Borderou de evaluare (job #2022113) | Cod sursa (job #455242) | Borderou de evaluare (job #732942) | Borderou de evaluare (job #1950943) | Cod sursa (job #954213)
Cod sursa(job #954213)
#include <fstream>
unsigned getHilLen(unsigned k, unsigned x, unsigned y){
if(k==1){
if(x<=(1u<<(k-1))&&y<=(1u<<(k-1))) return 0; //st sus
else if(x<=(1u<<(k-1))) return 1; //st jos
else if(y<=(1u<<(k-1))) return 3; //dr sus
else return 2; //dr jos
}
else if(x<=(1u<<(k-1))&&y<=(1u<<(k-1))) //st sus
return getHilLen(k-1,y,x);
else if(x<=(1u<<(k-1))) //st jos
return (1u<<k) + getHilLen(k-1,x,y-(1u<<(k-1)));
else if(y<=(1u<<(k-1))) //dr sus
return 3*(1u<<k) + getHilLen(k-1,(1u<<(k-1))-y+1,(1u<<k)-x+1);
else //dr jos
return 2*(1u<<k) + getHilLen(k-1,x-(1u<<(k-1)),y-(1u<<(k-1)));
}
int main(){
std::ifstream fin("fractal.in");
std::ofstream fout("fractal.out");
unsigned K,x,y;
fin>>K>>x>>y;
fout<<getHilLen(K,x,y)<<'\n';
}