Cod sursa(job #1834248)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 24 decembrie 2016 09:56:11
Problema Fractal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int compsize[20],i,j,n,k,x,y;

int calc(int n, int x, int y, int idx) {

   if (n==2) {
   	 if (x==1 && y==1) return 0;
   	 else if (x==2 && y==1) return 1;
	 else if (x==2 && y==2) return 2;
	 else return 3; 
   }

   int mid=n/2;
   
   if (x<=mid && y<=mid) return calc(n/2,y,x,idx-1);
   else if (x>mid && y<=mid) return compsize[idx-1]+1+calc(n/2,x-mid,y,idx-1);
   else if (x>mid && y>mid) return compsize[idx-1]*2+2+calc(n/2,x-mid,y-mid,idx-1);
   else {
        int newx=x;
		int newy=y-n/2;
		int newn=n/2;
		int newmid=n/4;
		
		newy=newn-newy+1;
		newx=newn-newx+1;
		
		swap(newx,newy); 
        
        return compsize[idx-1]*3+3+calc(n/2,newx,newy,idx-1);
   }
	
}

int main(void) {
	//ifstream cin("fractal.in");
	//ofstream cout("fractal.out");
	
	cin>>k>>y>>x;
	
	compsize[1]=3;
	
	for (i=2; i<=k; ++i) compsize[i]=4*compsize[i-1]+3;
	
	cout<<calc((1<<k),x,y,k);
	
	return 0;
}