ac-library-csharpを使ってみるの続きです。ac-library-csharpだけでなく自作のライブラリをひとつのファイルに統合する方法を解説します。

SourceExpanderとSourceExpander.Embedder

競技プログラミングをやっていると自作ライブラリを使えないか考えたくなるものです。自作ライブラリもSourceExpanderを使えばひとつの提出用のファイルにまとめることができます。

ただし、SourceExpanderの仕様上の制約からライブラリは実行プロジェクトと別でなければなりません。そこでソリューションエクスプローラーでソリューションを右クリックして、「追加」→「新しいプロジェクト」でライブラリ用のプロジェクトを作成しましょう。そしてプロジェクト参照の追加からこのライブラリ用のプロジェクトを追加しておきます。

そのあと追加したライブラリ用のプロジェクトを右クリックして「NuGetパッケージの管理」でNuGet管理画面を開き、SourceExpander.Embedder をインストールします。またライブラリ側でもac-library-csharpを使いたい場合はこれもインストールしておきます。

自作ライブラリを提出用コードに変換してみる

ためしにこの問題を解いてみることにします。

013 – Passing(★5)

これは k = 1, 2, …, N それぞれについて、(頂点 1 から頂点 k までの距離)+ (頂点 k から頂点 N までの距離)の合計を求めよという問題です。ダイクストラ法を用いれば(頂点 1 から頂点 k までの距離)はわかります。またスタート地点を頂点 N とすれば(頂点 k から頂点 N までの距離)もわかります。あとはそれらを足し合わせた値を出力するだけです。

最短経路問題はよく出題されるのでダイクストラ法で最短距離を求めるライブラリを自作します。

普通のダイクストラ法を実装しているだけなんの変哲もないコードです。

事前にこのようなライブラリを準備しておけば、あとはこれを利用してコードを書くだけなのでかなりの時間短縮につながると思います。

実際に提出したコード

では、よき競技プログラミングライフを。