Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 221 C問題 Select Mul

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

整数  N の各桁の数字を2つの正の整数に分割し, 並び替えることによって, 2つの正の整数  A, B を作る. このとき,  A \times B を最大化せよ. ただし,  A, B において, leading-zero は認められない.

制約

  •  1 \leq N \leq 10^9
  •  N には  0 でない桁が2つ以上含まれる.

解法

まず, グルーピングを全探索する. このとき,  N=10^9 とはなり得ないことから,  N の桁数を  d とすると,  d \leq 9 である.

このとき, 2つのグループをグループ A,B とすると, グループに分け方は  2^d 通りである.

各グループに分けられた数字をうまく並び替えて積を最大化するにはどうすればよいだろうか? まず,  A, B それぞれをグループの中で最大化する. では, グルーピングの中で,  A, B を最大化するためにはどうすればよいか. 結論からいうと, 各桁の数字が大きい順になるように並び替えれば  A,B を最大化できる.

このように各グルーピングにおいて数字を大きい順にならべた整数の積を全探索することによって正解を導くことができる.

なお, leading-zero はこの問題においては特別な考慮をしなくてもうまいこと処理してくれる.