競プロライブラリ

Java向け競プロライブラリ(構成文字で並べ替えた文字列)

以下の問題を解くための手法として「2つの文字列S, Tについて、Sの各文字を並べ替えてTに一致させられるかを考える場合、SとTの各文字を昇順に並べ替えてできる文字列どうしを比較して一致しているかどうかを判定する」と公式で解説されており、ライブラリを…

Java向け競プロライブラリ(一致文字列長)

以下の問題を解くための手法として「2つの文字列を順方向・逆方向それぞれに走査し、一致する部分の最大長を求める」というものが公式解説に用意されており、ほとんど典型手法と見なされている(諸説あり)にもかかわらず、ライブラリを用意していなかったの…

Java向け競プロライブラリ(ランレングス)

文字列をランレングス圧縮すると解きやすい問題向けのライブラリです。なお、本記事では自前ライブラリのPairを利用しています(以下参照)。 Java向け競プロライブラリ(ペア) - JunKobayashi’s diary 例えば以下の問題で役に立ちます。 AtCoder Beginner Co…

Java向け競プロライブラリ(順列)

まずは、1つの順列のみを必要とする問題で使用するクラス(ただし、 \begin{align} 10! &= 3628800 < 3.7\times 10^6\\ 11! &= 39916800 < 4\times 10^7\\ 12! &= 479001600 > 4.7\times 10^8 \end{align} を考慮すると、探索範囲の大きさが1つの順列のみに…

Java向け競プロライブラリ(ペア)

ソート可能なペアとして入力値を取り扱うと解きやすい問題向けのライブラリです。必要ならば、問題の条件に適合するようにソート条件を変更して使います。 例えば以下の問題で役に立ちます。 AtCoder Beginner Contest 256 D - Union of Interval 2023/09/18…

Java向け競プロライブラリ(素数)

素数が絡んでくる問題向けのライブラリです。 問題の制約に合わせて適宜sieveSizeの値を変更して使用します。 例えば以下の問題で役に立ちます。 AtCoder Beginner Contest 250 D - 250-like Number AtCoder Beginner Contest 254 D - Together Square impor…

Java向け競プロライブラリ(最大公約数・最小公倍数・約数洗い出し)

最大公約数・最小公倍数が絡んでくる問題向けライブラリです 例えば以下の問題で役に立ちます AtCoder Beginner Contest 162 C - Sum of gcd of Tuples (Easy) AtCoder Beginner Contest 253 D - FizzBuzz Sum Hard final class GcdLcmCalculator { /** * ユ…

Java向け競プロライブラリ(Bit全探索)

要素数が20以下程度の配列で入力される場合に思い浮かべておくと得につながりがちな気がします。 例えば以下の問題で使用するとよいです。 AtCoder Beginner Contest 249 C - Just K final class BitWholeSearchHelper { public static String getBinaryStri…

Java向け競プロライブラリ(幅優先探索)

幅優先探索を使用する問題向けのライブラリです。例えば以下のような問題に対して使用すると有用です。 AtCoder Beginner Contest 007 C - 幅優先探索 AtCoder Beginner Contest 204 C - Tour import java.util.ArrayDeque; import java.util.ArrayList; imp…

Java向け競プロライブラリ(二分探索)

java.util.ArraysクラスにbinarySearchメソッドは実装されていますが、「keyで指定された要素を複数持つ場合にはどれが返されるか保証されていない」という使い道に困り果てそうな実装であるため、自前でライブラリを持っておくべきかと思われます Arrays (J…