atcoder#ABC296E. [ABC296E] Transition Game

[ABC296E] Transition Game

配点 : 500500

問題文

長さ NN の数列 A=(A1,A2,,AN)A=(A_1,A_2,\ldots,A_N) が与えられます。ここで、各 AiA_i (1iN)(1\leq i\leq N)1AiN1\leq A_i \leq N をみたします。

高橋君と青木君が NN 回ゲームを行います。i=1,2,,Ni=1,2,\ldots,N 回目のゲームは次のようにして行われます。

  1. 青木君が正整数 KiK_i を指定する。
  2. 青木君の指定した KiK_i を聞いた後、高橋君は 11 以上 NN 以下の整数 SiS_i を選び、黒板に書く。
  3. その後、 KiK_i 回次の操作を繰り返す。
    • 黒板に xx が書かれているとき、それを消し、AxA_x を新しく書く。

KiK_i 回の操作の後で黒板に書かれている整数が ii ならば ii 回目のゲームは高橋君の勝ち、そうでないならば青木君の勝ちとなります。 ここで、Ki,SiK_i,S_ii=1,2,,Ni=1,2,\ldots,N に対して独立に選ぶ事ができます。

両者が、自身が勝つために最善の行動をとったとき、NN 回のゲームのうち高橋君が勝つ回数を求めてください。

制約

  • 1N2×1051\leq N\leq 2\times 10^5
  • 1AiN1\leq A_i\leq N
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

NN

A1A_1 A2A_2 \ldots ANA_N

出力

両者が最善の行動をとったとき、NN 回のゲームのうち高橋君が勝つ回数を出力せよ。

3
2 2 3
2

11 回目のゲームにおいて、青木君が K1=2K_1=2 を指定したとき、高橋君は S1S_1 として、1,2,31,2,3 のいずれを選んでも勝つことはできません。

例えば、高橋君が最初に黒板に S1=1S_1=1 と書いたとすると、22 回の操作で黒板に書かれている数は順に 12(=A1)1\to 2(=A_1)22(=A2)2\to 2(=A_2) と変化し、 最終的に黒板に書かれている数は 2(1)2(\neq 1) であるため、青木君の勝ちとなります。

一方、2,32,3 回目のゲームにおいては、青木君の指定した KiK_i の値によらず、高橋君はそれぞれ 2,32,3 を最初に黒板に書くことで勝つ事ができます。

よって、両者が、自分が勝つために最善の行動をとったとき、高橋君が勝つゲームは 2,32,3 回目の 22 回であるため、22 を出力します。

2
2 1
2

11 回目のゲームにおいて、高橋君は、青木君が指定した K1K_1 が奇数のときは 22、偶数のときは 11 を最初に黒板に書く事で勝つ事ができます。

同様に 22 回目のゲームにおいても勝つ方法が存在するため、1,21,2 回目のゲームのいずれでも高橋君は勝利する事ができ、22 が答えとなります。