Pagini recente » Cod sursa (job #2730917) | Cod sursa (job #1199676) | Cod sursa (job #2224904) | Cod sursa (job #1303632) | Cod sursa (job #798346)
Cod sursa(job #798346)
#include <fstream>
using namespace std;
int mem[16] = {0, 3, 15, 63, 255, 1023, 4095, 16383, 65535, 262143, 1048575, 4194303, 16777215, 67108863, 268435455, 1073741823};
long long solve(int k, int x, int y) {
if(k == 0)
return 0;
int l = 1 << (k - 1), cadran; // l = 2 ^ (k-1)
if(x <= l && y <= l) cadran = 1;
if(x > l && y <= l) cadran = 2;
if(x > l && y > l) cadran = 3;
if(x <= l && y > l) cadran = 4;
switch(cadran) {
case 1: return solve(k-1, y, x);
case 2: return 1 + mem[k-1] + solve(k-1, x - l, y);
case 3: return 2 + 2 * mem[k-1] + solve(k-1, x - l, y - l);
case 4: return 3 + 3 * mem[k-1] + solve(k-1, l - (y - l) + 1, l - x + 1);
}
}
int main(void) {
int k, x, y;
ifstream fin("fractal.in");
fin >> k >> x >> y;
fin.close();
ofstream fout("fractal.out");
fout << solve(k, y, x);
fout.close();
}