Dまで。二時間近くあってE通せないのは悲しい。
コンテスト後のツイート
E. Permutation Commutation
コンテスト後、落ち着いて考えたら自力でACできた。
Functional Graphと見て、サイクルに分解する。
たとえば、
A=[4, 5, 1, 3, 6, 2]
を考えると、(1,4,3)と(2,5,6)というサイクルがある。
これに対応するBは、(1番目, 4番目, 3番目)が(1,4,3),(4,3,1),(3,1,4)もしくは、(2,5,6),(5,6,2),(6,2,5)でなくてはならない。(2番目, 5番目, 6番目)も同様。
ここまではコンテスト中に実験で分かっていた。i→A[i]とうつるとき、対応するいずれかのサイクルでindexを一つずらしたように入れなくてはいけない、と。
しかし、さらにサイクル長に関して条件がありそうだとは思ったが、上手くまとまらなかった。
実際は、同じサイクル長のものでないといけない。サイクル長3のものをサイクル長1のもので埋める……みたいなことができる気がして混乱してしまったが、こういうことができないと気付き、同じサイクル長のものしか使えないと分かった。
なので、サイクル長で分類すればACできた。
G. Send GCDs
解説AC。
・150個の素数を使うと、10^6までで1<<18個の数が作れる。
・bitごとに見るとn*20くらいの長さだが、これを18個ずつに分解すれば、上の対応表により変換できる。
解法を聞けばまあ分かるが、これは10/9*nとか150とかいう怪しげな制約から類推するしかなさそう。推理力が問われる問題だったようだ。