公式

B - Symmetric Painting 解説 by riano_


mod \(N\) で考えると、Alice の操作は直前に塗った点が \(x\) であるときに \(-x\) を、Bob の操作は直前に塗った点が \(x\) であるときに \(2K-x\) を塗ることになります。Alice が初めに点 \(0\) を塗るとすると、 \(0, 2K, -2K , 4K, -4K , \ldots\) と順に塗られていき、\(\mathrm{gcd}(N,2K)\) 個おきの点が全て塗られた段階で「両者から見て対称」な状態となります( \(\mathrm{gcd}\) で最大公約数を表します)。Alice が点 \(N/2\) を塗って始められる場合で、そうしたとしても同様です。ここまでを「\(1\) 周」とします。

このときに、塗られた点の個数が奇数、かつ全体の点の個数が偶数であれば、Bob が「自分の対称軸上にある点のうち、塗られなかった方」を塗って \(2\) 周目を始めることができます(塗られた頂点が奇数個のとき、対称軸上の \(2\) つの点がともに塗られていることはあり得ません)。

一方、塗られた点の個数が偶数であれば、このとき Alice の手番となっていますが、偶数個塗ったことから Alice の対称軸上の点は \(2\) つとも塗られています。したがって、そこで操作は打ち切りとなり、全ての点を塗ることはできません。

\(2\) 周目を塗り終わった後は、全ての対称軸上の点は \(2\) つ塗られているか塗られていないかであり、特に Alice と Bob のいる対称軸上の点は \(2\) 個とも塗られているため、これ以上の操作は続けられません。

以上から、

  • \(\mathrm{gcd}(N,2K)=1\)\(1\) 周で塗り終わる)
  • \(\mathrm{gcd}(N,2K)=2\) かつ \(N/\mathrm{gcd}(N,2K) (=N/2)\) が奇数( \(2\) 周で塗り終わる)

のどちらかの場合のみ全ての点を黒く塗ることができます。


実装例:https://atcoder.jp/contests/arc188/submissions/60033048

投稿日時:
最終更新: