Cod sursa(job #497389)

Utilizator nandoLicker Nandor nando Data 2 noiembrie 2010 13:03:13
Problema Fractal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <fstream>
using namespace std;

#define MAXK 16

int size[MAXK];

int dist(int k, int x, int y){
	int p;
	if(k){
		if(x <= (1 << k - 1)){
			if(y <= (1 << k - 1)){
				p = dist(k - 1, y, (1 << k - 1) - x);
				return p;
			}else{
				p = dist(k - 1, x, y - (1 << (k - 1))) + (size[k - 1] + 1);
				return p;
			}
		}else{
			if(y > (1 <<k - 1)){
				p = dist(k - 1, x - (1 << (k - 1)), y) + (size[k - 1] + 1) * 2; 
				return p;
			}else{
				p = dist(k - 1, y - (1 << (k - 1)), (1 << k) - x + (1 << (k - 1))) + (size[k - 1] + 1) * 3;
				return p;
			}
		}
	}else return 0;
}

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;
}