|
| 1 | +# クラス ContestScanner |
| 2 | + |
| 3 | +競技プログラミングで利用できる入力クラスです. |
| 4 | +`java.util.Scanner`等の一般的な入力クラスと比較して高速ですが, ASCII文字以外を入力した際に意図しない動作が発生することがあるので注意してください. |
| 5 | + |
| 6 | +## コンストラクタ |
| 7 | + |
| 8 | +```java |
| 9 | +public ContestScanner(java.io.InputStream in) |
| 10 | +``` |
| 11 | +指定された入力ストリームからスキャンされた値を生成する新しいContestScannerを構築します. |
| 12 | + |
| 13 | +```java |
| 14 | +public ContestScanner() |
| 15 | +``` |
| 16 | +標準入力からスキャンされた値を生成する新しいContestScannerを構築します. |
| 17 | + |
| 18 | + |
| 19 | +## メソッド |
| 20 | + |
| 21 | +### hasNext |
| 22 | +```java |
| 23 | +public boolean hasNext() |
| 24 | +``` |
| 25 | +このスキャナが入力内に別のトークンを保持する場合はtrueを返します. |
| 26 | + |
| 27 | +### next |
| 28 | +```java |
| 29 | +public String next() |
| 30 | +``` |
| 31 | +このスキャナから次の完全なトークンを検索して返します。 |
| 32 | + |
| 33 | +### 数値入力 |
| 34 | +```java |
| 35 | +public int nextInt() |
| 36 | +public long nextLong() |
| 37 | +public double nextDouble() |
| 38 | +``` |
| 39 | +次のトークンを`int`型/`long`型/`double`型として解釈して返します. |
| 40 | + |
| 41 | +### 配列入力 |
| 42 | +```java |
| 43 | +public long[] nextLongArray(int length) |
| 44 | +public int[] nextIntArray(int length) |
| 45 | +public double[] nextDoubleArray(int length) |
| 46 | +``` |
| 47 | +`length`個の連続した値を読み取り, 配列として返します. |
| 48 | + |
| 49 | +```java |
| 50 | +public long[] nextLongArray(int length, java.util.function.LongUnaryOperator map) |
| 51 | +public int[] nextIntArray(int length, java.util.function.IntUnaryOperator map) |
| 52 | +public double[] nextDoubleArray(int length, java.util.function.DoubleUnaryOperator map) |
| 53 | +``` |
| 54 | +`length`個の連続した値を読み取り, 各要素に関数`map`を適用したものを配列として返します. |
| 55 | +1-indexで与えられた入力を0-indexに変換するなどの用途を想定しています. |
| 56 | + |
| 57 | +### 二次元配列入力 |
| 58 | +```java |
| 59 | +public long[][] nextLongMatrix(int height, int width) |
| 60 | +public int[][] nextIntMatrix(int height, int width) |
| 61 | +public double[][] nextDoubleMatrix(int height, int width) |
| 62 | +``` |
| 63 | +H行W列に並んだ値を読み取り, 二次元配列として返します. |
| 64 | + |
| 65 | +```java |
| 66 | +public char[][] nextCharMatrix(int height, int width) |
| 67 | +``` |
| 68 | +H行W列に並んだ文字を読み取り, 二次元配列として返します. |
| 69 | +前述の数値型に関するメソッドと異なり, 各行での空白区切りはないものとしていることに注意してください. |
| 70 | + |
| 71 | +## 使用例 |
| 72 | + |
| 73 | +[ABC187 E - Through Path](https://atcoder.jp/contests/abc187/submissions/20257303) |
| 74 | +最大100万個の入力, 20万個の出力が必要な問題です. |
| 75 | + |
| 76 | +# クラス ContestPrinter |
| 77 | +競技プログラミングで利用できる出力クラスです. |
| 78 | +基本的な機能は[`java.io.PrintWriter`](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintWriter.html)を利用しています. 自動フラッシュは行われないので, プログラムを終了する前に`flush()`や`close()`等のメソッドを実行することを忘れないように注意してください. |
| 79 | +以下のドキュメントには, [`java.io.PrintWriter`](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintWriter.html)との差分のみ記述します. |
| 80 | + |
| 81 | +## コンストラクタ |
| 82 | +```java |
| 83 | +public ContestPrinter(java.io.PrintStream stream) |
| 84 | +public ContestPrinter() |
| 85 | +``` |
| 86 | +指定された出力ストリームから新しいContestPrinterを作成します. 指定を省略した場合は`System.out`が指定されます. |
| 87 | + |
| 88 | +## メソッド |
| 89 | +### print(double) |
| 90 | +```java |
| 91 | +public void print(float f) |
| 92 | +public void println(float f) |
| 93 | +public void print(double d) |
| 94 | +public void println(double d) |
| 95 | +``` |
| 96 | +通常の`printWriter`で浮動小数点数を出力しようとすると, `3.13E-10`のような指数表記になってしまうことがありますが, 本メソッドでは小数点以下20桁まで通常の形式での出力を行います. これにより, 表示形式の不一致による意図しないWAを防ぐことができます. |
| 97 | +(多くの問題では「絶対誤差または相対誤差が一定値以下ならAC」というように判定されるため, 正しい計算で得られた値を十分な桁数出力すればACが得られます) |
| 98 | + |
| 99 | +### printArray |
| 100 | +```java |
| 101 | +public void printArray(int[] array, String separator, java.util.function.IntUnaryOperator map) |
| 102 | +public void printArray(int[] array, java.util.function.IntUnaryOperator map) |
| 103 | +public void printArray(int[] array, String separator) |
| 104 | +public void printArray(int[] array) |
| 105 | + |
| 106 | +public void printArray(long[] array, String separator, java.util.function.LongUnaryOperator map) |
| 107 | +public void printArray(long[] array, java.util.function.LongUnaryOperator map) |
| 108 | +public void printArray(long[] array, String separator) |
| 109 | +public void printArray(long[] array) |
| 110 | + |
| 111 | +public void printArray(double[] array, String separator, java.util.function.DoubleUnaryOperator map) |
| 112 | +public void printArray(double[] array, java.util.function.DoubleUnaryOperator map) |
| 113 | +public void printArray(double[] array, String separator) |
| 114 | +public void printArray(double[] array) |
| 115 | +``` |
| 116 | +`array`の各要素に対して関数`map`を適用し, `separator`区切りで出力します. 行末には`separator`は含まれず, 改行が挿入されます. |
| 117 | +`map`及び`separator`は省略可能で, 省略した場合は恒等写像/半角スペースが与えられた場合と同等の出力になります. |
| 118 | + |
| 119 | +`map`は0-indexedの計算結果を1-indexedに変換するような場合に利用するとよいです. |
| 120 | + |
| 121 | +## 使用例 |
| 122 | + |
| 123 | +[ABC187 E - Through Path](https://atcoder.jp/contests/abc189/submissions/20258750) |
| 124 | +最大100万個の入力, 20万個の出力が必要な問題です. |
0 commit comments