# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
117070 | 2019-06-14T15:19:13 Z | emilem | Board (CEOI13_board) | Java 11 | 0 ms | 0 KB |
import java.io.OutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.StringTokenizer; import java.math.BigInteger; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.InputStream; public class Main { static BigInteger min(BigInteger a, BigInteger b) { return a.compareTo(b) < 0 ? a : b; } static int Depth(String a) { int depth = 0; for (int i = 0; i < a.length(); ++i) if (a.charAt(i) == 'U') --depth; else if (a.charAt(i) == '1' || a.charAt(i) == '2') ++depth; return depth; } static BigInteger Coord(String a) { BigInteger coord = BigInteger.ZERO; for (int i = 0; i < a.length(); ++i) switch(a.charAt(i)) { case '1': coord = coord.multiply(BigInteger.valueOf(2)); break; case '2': coord = coord.multiply(BigInteger.valueOf(2)); coord = coord.add(BigInteger.ONE); break; case 'L': coord = coord.subtract(BigInteger.ONE); break; case 'R': coord = coord.add(BigInteger.ONE); break; case 'U': coord = coord.divide(BigInteger.valueOf(2)); } return coord; } public static void main(String[] args) { InputStream inputStream = System.in; OutputStream outputStream = System.out; InputReader in = new InputReader(inputStream); PrintWriter out = new PrintWriter(outputStream); String path = in.next(); int aDepth = Depth(path); BigInteger aCoord = Coord(path); path = in.next(); int bDepth = Depth(path); BigInteger bCoord = Coord(path); int iii = bCoord.intValue(); if (aDepth > bDepth) { int temp1; temp1 = aDepth; aDepth = bDepth; bDepth = temp1; BigInteger temp2; temp2 = aCoord; aCoord = bCoord; bCoord = temp2; } int depthSteps = bDepth - aDepth; bDepth = aDepth; bCoord = bCoord.shiftLeft(-depthSteps); BigInteger ans = aCoord.subtract(bCoord).abs().add(BigInteger.valueOf(depthSteps)); while (aDepth-- > 0) { --aDepth; depthSteps += 2; aCoord = aCoord.divide(BigInteger.valueOf(2)); bCoord = bCoord.divide(BigInteger.valueOf(2)); ans = min(ans, aCoord.subtract(bCoord).abs().add(BigInteger.valueOf(depthSteps))); } out.println(ans); out.close(); } static class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next() { while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } } }