Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

トヨタ自動車プログラミングコンテスト2022(AtCoder Beginner Contest 270)

ABCEの4完3WA。

各問題

A - 1-2-4 Test

1, 2, 4 は二進表記で 001, 010, 100 なので、以下のようにビットが立っているかどうかで判断可能です。

int ans = 0;
if (a & 1 or b & 1) ans += 1;
if (a & 2 or b & 2) ans += 2;
if (a & 4 or b & 4) ans += 4;

(公式解説のほうが賢かった...)

B - Hammer

まず、楽にするために X が負のときは X, Y, Z 全ての符号を反転させて、常に X が正数として考えます。(左右対称なので問題ありません)

  • Y < 0 または X < Y のときは原点から X までに壁がないので最小距離は X です。
  • そうでないとき
    • Y < Z のときはハンマーを拾えない(壁のほうが手前にある)ので不可能です。
    • 0 < Z( < Y) のとき、ゴールにいく過程でハンマーを拾って壁を壊せるので最小距離は X です
    • Z < 0( < Y) のとき、一旦 Z まで戻ってから進む必要があり、最小距離は X + abs(Z) * 2 です

X が負の時を考慮し忘れて 1WA、Y が負のときも考慮し忘れてさらに 1WA...。

C - Simple path

単に木上のDFSをして、帰りがけにパスを拾ってくればよいです。

D - Stones

解けず...。

DPか、残り a[k - 1] * 3 あたりまで貪欲してから全探索か、を考えていましたが...。

E - Apple Baskets on Circle

今週の目玉

二分法で「次の週で終わる」周を特定し、最後の1周は愚直にループを回して確定させればよいです。

親の顔より見た二分法の実装をミスって1WA...。なにやっとんねん。

まとめ

Dが仮に解けたとしても相当時間がかかりそうだったので、すぐEにいったのが立ち回り的には大正解で、レートを減らさずにすみました。

Dが結局解けてないのはだめですが。