Pagini recente » Cod sursa (job #1125) | Cod sursa (job #3300435) | Cod sursa (job #2799119) | Cod sursa (job #3297739) | Cod sursa (job #3283966)
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));
}
}
}