Cod sursa(job #498495)

Utilizator nandoLicker Nandor nando Data 5 noiembrie 2010 12:03:09
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#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;
}