Cod sursa(job #2143330)

Utilizator alicesuiuAlice Suiu alicesuiu Data 25 februarie 2018 20:30:30
Problema Fractal Scor 10
Compilator java Status done
Runda Arhiva de probleme Marime 1.45 kb
//package Fractal;

import java.io.*;
import java.util.*;

public class Main {
	private static final String INPUT_FILE_PATH = "fractal.in";
	private static final String OUTPUT_FILE_PATH = "fractal.out";
	static int v[] = new int[16];
	
	public static void computeV() {
		v[1] = 3;
		for (int i = 2; i <= 15; i++) {
			v[i] = 3 * v[i - 1] + 3;
			//System.out.println(v[i]);
		}
		
	}
	
	public static int fractal(int x, int y, int k) {
		//System.out.println("Apel cu " + x + " " + y + " " + k);
		if (k == 1) {
			if (x == 1 && y == 1)
				return 0;
			else if (x == 1 && y == 2)
				return 1;
			else if (x == 2 && y == 2)
				return 2;
			else
				return 3;
		} else {
			int l = (int) Math.pow(2, k);
			int halfL = l / 2;
			//System.out.println("l = " + l + " halfL = " + halfL);
			if (x <= halfL && y <= halfL)
				return fractal(y, x, k - 1);
			else if (x <= halfL && y > halfL)
				return 1 + 1 * v[k - 1] + fractal(x, y - halfL, k - 1);
			else if (x > halfL && y > halfL)
				return 2 + 2 * v[k - 1] + fractal(x - halfL, y - halfL, k - 1);
			else
				return 3 + 3 * v[k - 1] + fractal(l - y + 1, halfL - x + 1, k - 1);
		}
	}
	
	public static void main(String args[]) throws IOException {
		Scanner in = new Scanner(new FileReader(INPUT_FILE_PATH));
		PrintWriter out = new PrintWriter(OUTPUT_FILE_PATH);
		int k = in.nextInt();
		int x = in.nextInt();
		int y = in.nextInt();
		computeV();
		out.println(fractal(x, y, k));
		out.flush();
		in.close();
		out.close();
	}
}