tomboのブログ

競技プログラミングのことをいろいろ書きます AtCoder A茶H水

AHCのローカルテスタの使い方

AHCのローカルテスタ、自分も最初使い方が分からなかったので、それについて書きます。WindowsPowerShellなので、それ以外の環境の人はまた調べてみてください← 言語はC++を想定していますが、コンパイルやファイルの実行を言語に合わせて書き換えてください。

PowerShellのコード

Param($l, $u)
$num = 32
$num_txt = "AHC{0:D3}" -f $num
Set-Location "実行するコードへの絶対or相対パス"

g++ -O3 -D_GLIBCXX_DEBUG -std=c++2a "$num_txt.cpp" -o AHC.exe
for ($i=$l; $i-lt$u; $i++){
    $tmp="{0:D4}" -f $i

    # non-interactive
    Get-Content in/$tmp.txt | ./AHC.exe > out.txt
    Write-Host -NoNewLine $i": "
    ./vis.exe in/$tmp.txt out.txt
    
    # interactive
    # Write-Host -NoNewLine $i": "
    # Get-Content in/$tmp.txt | ./tester.exe ./AHC.exe > out.txt
}

<#
実行コマンド
ファイル名.ps1 -l 0 -u 50
#>

Param()で引数を2つ受け付けています。$numはAHCの番号です。(3桁で0埋めしています)Set-Location (Linuxのcd) で移動しています。どこで実行してもいいようにするためです。-D_GLIBCXX_DEBUGで、index out of rangeのときに表示してくれるようにしています。(行数の表示方法は分かりません)


これはC++なのでコンパイルしていますが、Pythonなどのインタプリタは、./AHC.exeのところで直接ファイルを実行してください。


入力ファイルの番号は [l, u) の半開区間になっています。4桁で0埋めしていますが、AHCではダウンロード時のデフォルトで、0000~0099までしか入力ファイルがないので、seeds.txtに欲しい入力ファイルの数字を書いて、gen.exeを実行すると生成してくれます。


実行は

ファイル名.ps1 -l 0 -u 50

で出来ます。(0000~0049の場合)

並列実行について

並列実行すれば、並列した数だけ速くなります。(それはそう)マルチプロセスのことだと思います。ちなみにマルチスレッドは、スレッドが分かれるだけで速度は変わらないと思います。並列で1万ケース回すみたいな話も聞いたりしていて、たくさん回せばその解法の評価がより正確になるので、良かったら試してみてください。自分はよく分かっていません(そんな)

まとめ

AHCは楽しいので、ぜひぜひって感じです。