ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC112 D - Partition

問題
提出コード
a_1,a_2, ... a_nの公約数をpとします。
このとき、a_ipで割り切れるので、mpで割り切ることができます。
ということで、まず解の候補がmの約数であることがわかります。これは、\sqrt{m}までを全探索して、それをmで割ったときのあまりが0かどうかで判断すればよいです。pmの約数のとき、m/pmの約数であることに気を付ければ、約数を探索するのはO(\sqrt{m})になります。
次に、pが問題の条件を満たすかどうかについて考えると、
すくなくともn個の要素すべてがpの倍数でなくてはなりません。このとき必要な最小値は、a_iがすべてpであった場合ですので、m = p×nである必要があります。
しかし、m-p×nはかならずpの倍数になっているため、残った数はどこか1つの要素にすべて放り込んでしまえばいいので、m  \geqq p×nが成り立っていればよいことがわかります。
ということで、
pmの約数、かつm  \geqq p×nがなりたつpのうち最大のものを、O(\sqrt{m})の全探索によって求めれば、それが答えになります。