kurarrr's memooo

主に競プロ備忘録

ARC 103 D - Robot Arms (600)

解法

sample2をじっと見ると,必要条件として

というのがあることがわかる
パリティに注目するのはよくやるのでこれは気づかないとどうにもならない.

実際に,そのときdとして1を20個/21個用意すれば300点は取れる.
(例えば (-3,2) のとき LLLUU(UD)*8 )

このような構築ゲーで2冪に注目するのが定跡なことを念頭に置いて,
アームを 20 , 21, 22 , ..と増やしていくことにしよう.
すると 2k まで使ったときに, abs(x) + abs(y) <= 2k+1 - 1 のひし形内の和が奇数の点を全て取れることがわかる.
abs(x),abs(y) < 230 - 1 だから, abs(x) + abs(y) < 231 - 2 で k = 30としてやれば十分.
和がevenの時は 20, 20, 21, .. , 230 とすれば良い.
このようにすれば必ず構築できることもわかったので,列挙した必要条件が必要十分条件だったこともわかった.(よくあるパターン)

実際の構築に関しては 2k のkが大きい方から決めていき,
abs(x+dx) + abs(y+dy) が0に近くなるようにしてやれば良い
そうしていけば最終的に(0,0)に一致することは上で確かめられている.

メモ

2冪は頭にあったけど実際に書いて見なかったのがよくなかった.

コード