Google Code Jam 2019 Round1C : Power Arrangers

問題. Power Arrangers

ABCDE の5文字からなる順列は  5! = 120 通りある.その中から1つの順列を取り除いた119個の順列を適当な順番に並べた列  s がある(  s は未公開).「  s i 番目の文字が何か」というクエリを高々  F 回行い取り除かれた順列を求めよ.

制約 F = 475, 150

解法

取り除かれた順列  p を1番目の文字から順番に求めることを考える. p の1番目の文字は119個の各順列の1番目の文字へのクエリを行い,5文字の中で出現頻度が一番小さいものとなる.次に  p の2番目の文字を求めることを考える.このとき,1番目の文字が  p と異なる順列は考える必要がないので, 5! / 5 - 1 = 23 個の順列の2番目の文字へのクエリのみを行い,上と同様に出現頻度が一番小さく  p の 1番目と異なる文字が  p の2番目の文字となる.3番目と4番目の文字も同様にして求めると,クエリの総回数は
  (5! \,/ \, 5 - 1) + (4! \,/ \, 4 - 1) + (3! \,/ \, 3 - 1) = 148 \le F
となる.ただし,5番目の文字は  p の1番目から4番目に含まれない文字となるのでクエリを行う必要がない.

本番は通過することだけを考えてテンパって解けなかったけど,ゆっくり考えたら解けたので良かった.本番でどこまで思考時間に費やすのかの時間配分が上手くできないので課題.