Pagini recente » Cod sursa (job #2289905) | Cod sursa (job #582915) | Cod sursa (job #2046760) | Cod sursa (job #683962) | Cod sursa (job #498496)
Cod sursa(job #498496)
#include <iostream>
#include <fstream>
using namespace std;
#define MAXK 17
int size[MAXK];
int dist(int k, int x, int y){
if(!k){
return 0;
}
int p;
if(x <= (1 << k - 1)){
if(y <= (1 << k - 1)){
p = dist(k - 1, y, x);
printf("a%d:%d %d ->%d\n", k, x, y, p);
return p;
}else{
p = dist(k - 1, x, y - (1 << (k - 1))) + (size[k - 1] + 1);
printf("b%d:%d %d ->%d\n", k, x, y, p);
return p;
}
}else{
if(y <= (1 << k - 1)){
p = dist(k - 1, (1 << k - 1) - y + 1, (1 << k) - x + 1) + (size[k - 1] + 1) * 3;
printf("c%d:%d %d ->%d\n", k, x, y, p);
return p;
}else{
p = dist(k - 1, x - (1 << (k - 1)), y - (1 << (k - 1))) + (size[k - 1] + 1) * 2;
printf("d%d:%d %d ->%d\n", k, x, y, p);
return p;
}
}
}
int main(){
fstream fin("fractal.in", ios::in);
fstream fout("fractal.out", ios::out);
int k, x, y;
fin>>k>>x>>y;
for(int i = 1; i < MAXK; ++i){
size[i] = size[i - 1] * 4 + 3;
}
fout<<dist(k, x, y)<<endl;
fin.close();
fout.close();
return 0;
}