AtCoder Regular Contest 151 A問題 Equal Hamming Distances
問題
提出解答
問題の概要
からなる文字列を 列と呼ぶことにする.
長さ の 列 がある.
同じ長さの文字列 に対するハミング距離を と書くことにする.
長さ の 列 で となるものは存在するか? 存在するならばこのような長さ の 列 のうち, 辞書式最小であるものを求めよ.
制約
- は長さ の 列
解法1 (存在条件)
まず, となる が存在することの特徴づけを考える.
必要条件から考える. を排他的論理和とすると, を法にして,
である. よって, となる が存在するならば, は偶数でなくてはならない.
十分条件について考える. が偶数であるとして, とする. このとき, となる を昇順に とする. このとき, を
とすると, である.
以上から, が偶数であることが が存在することの必要十分条件である.
解法2
が偶数であるとする. 十分条件のときの議論をよくみてみると, となる のうち, 個が 側, 残りの 個を 側, 残りは任意であるような文字列 が となり, 逆に であるような文字列 はこの条件を満たす.
よって, 次の問題を考えることになる.
次の条件をみたすような文字列 のうち, 辞書式最小であるものを求めよ.
- のうち, となる整数 の個数が 個, となる整数 の個数が 個
であるような についての条件は特にないので, 辞書式最小のためには としなければならない.
の順に[tex: U{i_j}=S{i_j}] となる整数 の個数が 個, [tex: U{i_j}=T{i_j}] となる整数 の個数が 個とすることが不可能にならないように と優先的に割り当てるようにする.
このようにして出来上がった文字列 が条件を満たし, 辞書式最小になる.