Cod sursa(job #798346)

Utilizator NikitaUtiuNichita Utiu NikitaUtiu Data 16 octombrie 2012 13:53:28
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#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();
}