Cod sursa(job #3283966)

Utilizator lucky1992Ion Ion lucky1992 Data 10 martie 2025 19:20:51
Problema Fractal Scor 100
Compilator java Status done
Runda Arhiva de probleme Marime 2.15 kb
import java.io.*;
import java.util.StringTokenizer;

public class Main {

  public static class MyScanner implements Closeable {
    BufferedReader br;
    StringTokenizer st;

    public MyScanner(String file) throws FileNotFoundException {
      br = new BufferedReader(new InputStreamReader(new FileInputStream(file)), 1 << 16);
    }

    String next() {
      while (st == null || !st.hasMoreElements()) {
        try {
          st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      return st.nextToken();
    }

    int nextInt() {
      return Integer.parseInt(next());
    }

    long nextLong() {
      return Long.parseLong(next());
    }

    double nextDouble() {
      return Double.parseDouble(next());
    }

    String nextLine(){
      String str = "";
      try {
        str = br.readLine();
      } catch (IOException e) {
        e.printStackTrace();
      }
      return str;
    }

    @Override
    public void close() throws IOException {
      br.close();
    }
  }

  public static int fractal(int k, int x, int y) {
    if (k == 1) {
      if (x == 1 && y == 1) return 0;
      if (x == 1 && y == 2) return 3;
      if (x == 2 && y == 1) return 1;
      if (x == 2 && y == 2) return 2;
    }

    int length = 1 << (k-1);
    int square = length * length;

    if (x <= length && y <= length) { // cadranul 1
      return fractal(k - 1, y,  x);
    }

    if (x > length && y <= length) { // cadranul 2
      return square + fractal(k - 1, x - length, y);
    }

    if (x > length && y > length) { // cadranul 3
      return 2 * square + fractal(k - 1, x - length, y - length);
    }

    if (x <= length && y > length) { // cadranul 4
      return 3 * square + fractal(k - 1, length - (y - length) + 1, length - x + 1);

    }

    return 0;
  }

  public static void main(String[] args) throws IOException {
    try(MyScanner scanner = new MyScanner("fractal.in");
        PrintWriter pw = new PrintWriter(new FileOutputStream("fractal.out"))) {
      int k = scanner.nextInt();
      int y = scanner.nextInt();
      int x = scanner.nextInt();

      pw.println(fractal(k, x , y));
    }


  }
}