Pagini recente » Cod sursa (job #2905935) | Cod sursa (job #9749) | Cod sursa (job #2251764) | Cod sursa (job #2746278) | Cod sursa (job #3227028)
#include <fstream>
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int k, x, y;
// 1 4
// 2 3
//ai grija la cum faci rotatiile alea ca uneori trebuie sa iei coordonatele in oglinda (in general y - ul)
long long sol = 0;
long long drum(int n, int x, int y){
if(n == 0){
return 0ll;
}
//vedem in ce cadran ne aflam
//cadranul 1
int l = (1 << (n - 1));
if(x <= l && y <= l){
return drum(n - 1, y, x);
}
//cadran 2
if(x >= (l + 1) && y <= l){
return l * l * 1ll + drum(n - 1, x - l, y);
}
//cadranul 3
if(x >= (l + 1) && y >= (l + 1)){
return 2 * l * l * 1ll + drum(n - 1, x - l, y - l);
}
//cadranul 4
if(x <= l && y >= (l + 1)){
return 3 * l * l * 1ll + drum(n - 1, 2 * l - y + 1, l - x + 1);
}
}
int main(){
ios::sync_with_stdio(0);
f.tie(0);
f >> k >> y >> x;
g << drum(k, x, y);
}