제출 #117077

#제출 시각아이디문제언어결과실행 시간메모리
117077emilemBoard (CEOI13_board)Java
50 / 100
1053 ms185624 KiB
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; class board { static final BigInteger BIGTWO = BigInteger.valueOf(2); static BigInteger min(BigInteger a, BigInteger b) { return a.compareTo(b) < 0 ? a : b; } static int Depth(String aString) { char [] a = aString.toCharArray(); int depth = 0; for (char i: a) if (i == 'U') --depth; else if (i == '1' || i == '2') ++depth; return depth; } static BigInteger Coord(String aString) { char [] a = aString.toCharArray(); BigInteger coord = BigInteger.ZERO; for (char i: a) switch(i) { case '1': coord = coord.multiply(BIGTWO); break; case '2': coord = coord.multiply(BIGTWO); 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(BIGTWO); } 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.nextString(); int aDepth = Depth(path); BigInteger aCoord = Coord(path); path = in.nextString(); int bDepth = Depth(path); BigInteger bCoord = Coord(path); if (aDepth > bDepth) { int temp1 = aDepth; aDepth = bDepth; bDepth = temp1; BigInteger 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) { depthSteps += 2; aCoord = aCoord.divide(BIGTWO); bCoord = bCoord.divide(BIGTWO); 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 nextString() { 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(nextString()); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...