ARCコンテストの過去問(A・B)を埋めました。
ARC 058 以降のA・B問題は、ABCコンテストのC・D問題と共通になっています。
そちらについては ■ に記載しています。
A問題
全体
A問題は、途中からはABCコンテストの問題Cと問題を共有しています。
しかし、その時期以前のA問題はせいぜいABCコンテストのA~Bレベル。
当時ABCコンテストがなかった頃のチュートリアルという役割を持っていたのだと思います。
難易度順に埋めている方は、ABCコンテストのC問題よりもこちらが先に来ると思います。
ARC 023-A 経過日数
問題文通りに算数してもよいですし、pythonなら、標準ライブラリのdatetime がスマートです。
ARC 043-A 点数変換
この問題には、一般に2つの解があります。例えば、入力例1 に対しては、
,
としても条件を満たします。
しかし、
が負の場合を提出すると、WAになるので注意してください。
(ややひねくれた解ではありますが、条件は明確に満たしており、出題ミスの類であると考えています。)
問題B
全体
第20回前後から、はっきりと難易度が上がっているように感じました。
明確に方針を切り替えたタイミングがあったのではないでしょうか?(知らない)
そこまではABCコンテストのB~C、途中からABCコンテストのD問題程度だと思います。
ARC 002-B 割り切れる日付
これも、datetime の使い方を学習していると少し得ができる問題です。
日付や時刻の取り扱いは、世の中的には重要度がかなり高いと思いますが、競技プログラミングで得できる場面は少ないですね。
ARC 010-B 超大型連休
これもカレンダー絡み。のあとも少しどう実装するか悩みました。
ARC 025-B チョコレート
Pythonでのunique ACでした。それほど変わったことはやっていないと思います。
(このコンテスト回は、C問題もPython unique ACになった。)
ABC 032-B 道路工事
特記事項のない、連結成分を数えるだけの問題なはずなのですが……
超絶爆死しました(笑)
import numpy as np
N,M = map(int,input().split())
AB = np.array([input().split() for _ in range(M)], dtype = np.int32)
A = AB[:,0]
B = AB[:,1]
N,M = map(int,input().split())
AB = [[int(x) for x in input().split()] for _ in range(M)]
A,B = zip(*AB)
どちらもREが出ます。
のときに対処できていないのが原因です。
これも良い経験……次から気をつけましょう…。
にしても、テストケースの 8個/20個 が だとは思わなかった。REが出ているのが2, 3個ならすぐ気づいたと思うんですが、半数近くでREだったので、もっと広く起こりうる何かだと思っちゃって相当はまりました。
なお、実行時間はPython/PyPyで最短にはなりました。
ARC 047-C 同一円周上
今回記事にした範囲では、考察が最難クラスだと感じた。
中心を固定すると、正方形の4辺上に点がある。正方形が一つに定まるとは限らないところが厄介。
「一つに定まるとは限らない」ときにも、「標準的な代表元のとり方」を考えてあげることで解決。3辺以上が点を含むように正方形がとれるので、3つの方角を固定すると正方形が一意に定められる。
解説では45度回転しているけど、回転しないでも同値で特に何かが分かりやすくなる印象はないなぁ…。変換後の格子点が変換前の格子点と1対1に対応しないところとか、むしろ思考量が増えていないのかしら。他のブログでも、45度回転が典型手法として紹介されている場面を見たこともあるが、いまいちまだ良さが実感ができない。