/ 最近 .rdf 追記 編集 設定 本棚

脳log[20210113] 緑diff精進5問(+α)



2021年01月13日 (水)

最終更新: 2021-05-04T21:04+0900

[AtCoder] 緑diff精進5問(+α)

AtCoder Problems がお勧めする Moderate な問題(緑difficulty)を上から順に解いた。半年前に解けなかった問題も1年前に解けなかった問題も解けた。だから0完だったこの前の ARC 111 は忘れよう。

AtCoder Beginner Contest 178E 問題 Dist Max
提出 #19414840 (AC / 137 Byte / 319 ms / 28476 KB)
わかるようなわからないような感じが今でもするんだけど、y=x に沿って対極にある2点と、y=-x に沿って対極にある2点を抽出して比較すればいいらしい。コンテスト後に解いた人の感想が目に入っていたのでチートといえばチート。
AtCoder Beginner Contest 152D 問題 Handstand 2
提出 #19421375 (AC / 312 Byte / 63 ms/ 14260 KB)
面倒くさく計算で解いたんだけど、N 個の数を列挙して先頭の桁の数字と末尾の桁の数字でクラス分けして数えて掛け合わせるので解けたらしい。たぶんそちらの方が間違えない。
AtCoder Beginner Contest 114C 問題 755
提出 #19420198 (AC / 210 Byte / 81 ms / 17972 KB)
さっきのと似た問題。これは計算と列挙のハイブリッドで解いたんだけど、そうすると速くもなくシンプルでもなくどっちつかずになった。
そうすると? これを見よ>提出 #15048046 (jajapop さん)。シンプルに列挙して速い。
AtCoder Regular Contest 006C 問題 積み重ね
提出 #19420356 (AC / 95 Byte / 69 ms / 14280 KB)
謎の段ボール。重さと丈夫さが1つの数字で同時に表されている。1の上に2は乗せられないけれど、1と1と1を3つ乗せることはできる。謎の段ボール。
あ、大きさだと考えればいいのかも。小が大を支える不安定な重ね方が NG だと。でも重さって問題文に書いてあるなあ。←どうでもいいから解け。
最適な置き場所は1つなので貪欲法で。
AtCoder Beginner Contest 039D 問題 画像処理高橋君
提出 #19421120 (AC / 242 Byte / 86 ms / 29364 KB)
最近の ABC-D はこういう素直に実装するだけの問題ってなくない? 数学でいじめられたり制約でいじめられたりばっかりじゃない? この問題が今の ABC で出たら difficulty が緑ってことはまずなくて、灰茶がいいところだと思う。世知辛いなあ。

 アナクロニズム

過去問はテストケースが利用できる。DropBox からダウンロードするとコンテストの各問題ごとに in フォルダと out フォルダが解凍される。

ARC111_A フォルダの中がこうなっているとする。

  • in/
  • out/
  • my_answer.rb

そこで次のように実行する。(ARC111_A> はプロンプト)

ARC111_A> attc my_answer.rb

attc.bat の中身がこう。

@echo off
for %%F in ("in\*") do (
	call :run "%~1" "%%~F"
)
exit /b 0

:run
	echo %~1 ^< in\%~nx2
	call ruby27 "%~1" < "in\%~nx2" > "out\%~n1.out.txt"
	fc /A "out\%~n1.out.txt" "out\%~nx2"
	del "out\%~n1.out.txt"
	echo.
exit /b 0

カレントディレクトリの in フォルダの中身を入力として引数のスクリプトを ruby27 コマンドで実行する。出力を out フォルダの同名のファイルと fc コマンドで比較する。

call ruby27 という風に call が付いてるのは ruby27 が exe の名前ではなくて、C:\Program Files\Ruby27\bin に PATH を通してから ruby.exe を呼び出すバッチファイルの名前だという固有の事情から。

別に call でなくて当たり障りのないコマンドならたぶん何でもいいんだけど、call|ruby27 という風にパイプを通すと新しいコマンドインタープリタが起動するので、呼び出したバッチが setlocal してなかったとしても現在の環境(PATH 変数とかカレントディレクトリとか)が汚染されなくなるというハックがある。cmd /C "ruby27 ..." と同じことなんだろうけど、そっちは引数が引数になって二重の引用符が面倒の種だよね。

tc は Test Case の略だけど、 AtCoder の略が at か ac かで定まらないから、attc と actc の両方の名前でバッチを用意してる。ハードリンクにしたら中身の同期に手間もかからないし。

アナクロだけどそれなりに便利。