PE32

今回は計算量削減でかなり頭を抱えた。
愚直に回したのでは、超ハイパーウルトラアルティメットPCを組まない限り、
通常のPCでは終わらないようなとてつもない数の組み合わせを
試さなければならない。

寝起きにボーッとしていたらふと気がついた。
1~9の数字をそれぞれ必ず1度だけ使わなければならないので、
a \times b=p の式で、aの桁数+bの桁数+pの桁数=9 となる。
(当然といえば当然である)

これをもとにループ範囲を制約して実装し、正解を出せた。

実装面でも少し苦戦。
最初に正解を出したコードでは1分10秒弱かかり、1分ルールを超えてしまった。
これは、Pythonitertools.permutationsのような
長さ指定ありの順列取り出しのやり方が分からなかったので、
順列の重複を前提として、そのまま出た結果(積)の重複を
unordered_setで除くような実装だったためである。
順列取り出しのループの重複を除くよう実装し直したところ2秒で終わった。