Cod sursa(job #1015416)

Utilizator andy1496Casu-Pop Andrei andy1496 Data 24 octombrie 2013 16:58:29
Problema Fractal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <cstdio>
using namespace std;
 
int count (int k, int x, int y, int c) {
	int v=1<<k-1;
	switch (c) {
		case 1:
			
			if(k<=0)
        		return 0;
        		
        	if(x>v && y<=v)
        		return 3*v*v+count(k-1, x-v, y, 1);
        		
    		if(x<=v && y<=v)
        		return 2*v*v+count(k-1, x, y, 2);
        		
    		if(x<=v && y>v)
        		return v*v+count(k-1, x, y-v, 3);
    		
        	if (x>v && y>v)
    			return count(k-1, x-v, y-v, 3);
    			
			break;
			
		case 2:
			
			if(k<=0)
        		return 0;
        		
        	if(x>v && y<=v)
        		return count(k-1, x-v, y, 1);
        		
    		if(x<=v && y<=v)
        		return v*v+count(k-1, x, y, 2);
        		
    		if(x<=v && y>v)
        		return 2*v*v+count(k-1, x, y-v, 3);
    		
        	if (x>v && y>v)
    			return 3*v*v+count(k-1, x-v, y-v, 3);
    			
			break;
			
		case 3:
			
			if(k<=0)
        		return 0;
        		
        	if(x>v && y<=v)
        		return 3*v*v+count(k-1, x-v, y, 1);
        		
    		if(x<=v && y<=v)
        		return count(k-1, x, y, 2);
        		
    		if(x<=v && y>v)
        		return v*v+count(k-1, x, y-v, 3);
    		
        	if (x>v && y>v)
    			return 2*v*v+count(k-1, x-v, y-v, 3);
    			
			break;

	}
}
 
int main()
{
    int k, x, y;
    freopen ("fractal.in", "r+", stdin);
    freopen ("fractal.out", "w+", stdout);
    
 	scanf ("%d %d %d", &k, &x, &y);

 	printf ("%d", count (k, x, y, 3));
 	
    return 0;
}