🐥

Rust ではじめる AtCoder

に公開

はじめに

本記事はRustユーザーがAtCoderで競技プログラミングに取り組む上で、有用だと思われる知識をまとめたものです。随時加筆していく予定です。

I/O

proconio クレートを使用しましょう。複数回に分けて出力する場合は、main()#[fastout] で修飾することを忘れないようにしましょう。[1]

「インタラクティブな問題」を解く際には注意が必要です。以下の解説が参考になります。

Rust のバージョンを指定する

ワークスペースに rust-toolchian.toml を置くと、コンパイラや各種ツールを特定のバージョンに指定できます。必要であれば、components の一覧 参照のしてください。

rust-toolchian.toml
[toolchain]
channel = "1.70.0"
components = [ "rustc", "cargo", "rust-analyzer", "clippy" ]
targets = []
profile = "default"

デバッグ

プリントデバッグ用のコードを残したまま提出して WA してしまったことはありませんか? #[cfg(debug_assertions)] マクロで修飾されたコードブロックは、リリーズビルドで無視されます。

    #[cfg(debug_assertions)]
    for i in 0..=n {
        assert_eq!(factorial[i] * factorial_inv[i] % MOD, 1)
    }
    fn main() {
        #[cfg(debug_assertions)]
        println!("{}", brute_force())
    }

    #[cfg(debug_assertions)]
    fn brute_force() {
        todo!()
    }

ハッシュ

rustc-hash クレートで提供されている FxHashSet FxHashMap は標準ライブラリで提供されているそれよりも高速です[2]

脚注
  1. https://keens.github.io/blog/2017/10/05/rustdekousokunahyoujunshutsuryoku/ ↩︎

  2. https://blog.goose.love/posts/rosetta-hashing/ ↩︎

Discussion