ABC111-C:/\/\/\/

問題

https://beta.atcoder.jp/contests/abc111/tasks/arc103_a

数列 a_n が与えられる。以下の条件を満たすように数列を書き換える時、書き換える最小の数列の要素の個数はいくつか?

  • a_i = a_{i+2}\ (1 \le i \le n-2)
  • 数列に現れる数はちょうど 2 種類

制約

  • 2 \le n \le 10^5
  • n は偶数
  •  1 \le v_i \le 10^5

考え方

i が奇数の項と偶数の項に分けて考える。それぞれ o, a としておくと o, a に出現する値のうち最頻値が同じ場合は、次の最頻値以外の個数を書き換える。o, a の最頻値が異なる場合は、それぞれの最頻値以外の個数を書き換える。

Submission #3751909 - AtCoder Beginner Contest 111

どこに着目して考察するべきだったか

数列に現れる個数が 2 種類であることから、o, a とわけたときに最頻値と 2 番目の最頻値の情報が必要。

何がバグっていたか

Integer は参照型なので == で判定しない。.equals で判定する。 ごちゃごちゃして面倒であれば、(競プロでは)int型に代入してオートボクシングさせちゃうのも一つの手。

得た知見

類題