From f655cc480ce4c8d8df1dedcb5205d0ce107524b7 Mon Sep 17 00:00:00 2001 From: me Date: Fri, 30 Jan 2026 15:50:09 +0500 Subject: [PATCH] add fastscanner --- java/reverse/Reverse.java | 98 ++++++++++++++++++++++++++------------- java/reverse/test.dat | 2 + 2 files changed, 67 insertions(+), 33 deletions(-) create mode 100644 java/reverse/test.dat diff --git a/java/reverse/Reverse.java b/java/reverse/Reverse.java index 05f6fe4..dff1d1f 100644 --- a/java/reverse/Reverse.java +++ b/java/reverse/Reverse.java @@ -1,49 +1,81 @@ package reverse; -import java.util.ArrayList; -import java.util.Scanner; +import java.io.*; +import java.util.Arrays; public class Reverse { - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - ArrayList> lines = new ArrayList<>(); + public static void main(String[] args) throws IOException { + FastScanner sc = new FastScanner(); + int[][] lines = new int[8][]; + int linesCount = 0; while (sc.hasNextLine()) { - ArrayList line = new ArrayList<>(); - StringBuilder builder = new StringBuilder(); - String lineString = sc.nextLine(); + int[] line = new int[8]; + int count = 0; - for (char c : lineString.toCharArray()) { - if (!Character.isWhitespace(c)) { - builder.append(c); - } else { - if (!builder.toString().isEmpty()) { - line.add(builder.toString()); - } - builder = new StringBuilder(); + while (sc.hasNextInt()) { + if (count >= line.length) { + line = Arrays.copyOf(line, line.length * 2); } + line[count++] = sc.nextInt(); } - if (!builder.toString().isEmpty()) { - line.add(builder.toString()); + sc.nextLine(); + + line = Arrays.copyOf(line, count); + + if (linesCount >= lines.length) { + lines = Arrays.copyOf(lines, lines.length * 2); } - lines.add(line); + lines[linesCount++] = line; } - sc.close(); - - - - for (int i = lines.size() - 1; i >= 0; i--) { - if (lines.get(i).isEmpty()) { - System.out.println(); + PrintWriter out = new PrintWriter(System.out); + for (int i = linesCount - 1; i >= 0; i--) { + int[] line = lines[i]; + for (int j = line.length - 1; j >= 0; j--) { + if (j < line.length - 1) out.print(" "); + out.print(line[j]); } - for (int j = lines.get(i).size() - 1; j >= 0; j--) { - if (j > 0) { - System.out.print(lines.get(i).get(j) + " "); - } else { - System.out.println(lines.get(i).get(j)); - } + out.println(); + } + out.flush(); + } + + static class FastScanner { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String line = null; + int pos = 0; + + boolean hasNextLine() throws IOException { + if (line != null && pos < line.length()) return true; + line = br.readLine(); + pos = 0; + return line != null; + } + + boolean hasNextInt() { + if (line == null) return false; + while (pos < line.length() && Character.isWhitespace(line.charAt(pos))) pos++; + return pos < line.length(); + } + + int nextInt() { + while (pos < line.length() && Character.isWhitespace(line.charAt(pos))) pos++; + int start = pos; + boolean negative = line.charAt(pos) == '-'; + if (negative) pos++; + + while (pos < line.length() && Character.isDigit(line.charAt(pos))) pos++; + + int result = 0; + for (int i = negative ? start + 1 : start; i < pos; i++) { + result = result * 10 + (line.charAt(i) - '0'); } + return negative ? -result : result; + } + + void nextLine() { + pos = line.length(); } } -} +} \ No newline at end of file diff --git a/java/reverse/test.dat b/java/reverse/test.dat new file mode 100644 index 0000000..0177db2 --- /dev/null +++ b/java/reverse/test.dat @@ -0,0 +1,2 @@ +1 2 +3