解説
AiAj<AjAi を満たすような Ai,Aj の値の条件は、以下の条件のうちいづれかを満たすときです。(長いので証明は追記に載せます)
- Ai=1 かつ Ai<Aj
- 3≤Aj<Ai
- (Ai,Aj)=(2,3)
- Ai=2,3,4 かつ Aj=2
これらの条件を利用して、数列 A の構築を考えます。(以降の説明において、条件より Ai=Aj であることを断りなく用いています。)
1. A が 3 以上の整数からのみなるとき
3≤Aj<Ai より、A は 3≤AN となるような狭義単調減少数列です。このような A の個数は、3 ~ M の中から N 個の整数を選ぶ組み合わせの総数に等しく M−2CN となります。
2. A が 2 を含み 1 を含まないとき
- AN=2 のとき、 Ai=2,3,4 かつ Aj=2 , 3≤Aj<Ai より A は 5≤AN−1 となる狭義単調減少数列となります。このような A の個数は、5 ~ M の中から N−1 個の整数を選ぶ組み合わせの総数に等しく M−4CN−1 となります。
- AN−1=2 のとき、(Ai,Aj)=(2,3) より AN=3 となります。残りの N−2 個の要素は 3≤Aj<Ai と Ai=2,3,4 かつ Aj=2 より 5≤AN−2 となる狭義単調減少数列となります。このような A の個数は5≤M においてのみ、5 ~ M の中から N−2 個の整数を選ぶ組み合わせの総数に等しく M−4CN−2 となります。M<5 のときは 0 個です。
- AN−2 以前の要素が 2 になることはあり得ません。なぜなら、Ai=2 のときに条件を満たせるような Aj は 3 しかなく、A に同じ数字を複数回入れることはできないからです。
3. A が 1 を含み 2 を含まないとき
- A1=1 のとき、Ai=1 かつ Ai<Aj より A2 以降の要素は必ず 3 以上となります。よって 3≤Aj<Ai から、残り N−1 個の要素は 3≤AN となる狭義単調減少数列となります。このような A の個数は、3≤M においてのみ、 3 ~ M の中から N−1 個の整数を選ぶ組み合わせの総数に等しく M−2CN−1 となります。M<3 のときは 0 個です。
- A2 以降が 1 となることはあり得ません。Aj=1 のときに条件を満たせるような整数 Ai は存在しないからです。
4. A が 1 も 2 も含むとき
2.や3.の考察により、
- A1=1
- AN=2 または AN−1,AN=2,3
の両方が成り立たなければなりません。
-
AN=2 のとき、 Ai=2,3,4 かつ Aj=2 , 3≤Aj<Ai より A は 5≤AN−1 となる狭義単調減少数列となります。このような A の個数は、5 ~ M の中から N−2 個の整数を選ぶ組み合わせの総数に等しく M−4CN−2 となります。
-
AN−1,AN=2,3 のとき、残りの N−3 個の要素は 3≤Aj<Ai と Ai=2,3,4 かつ Aj=2 より 5≤AN−3 となる狭義単調減少数列となります。このような A の個数は、5 ~ M の中から N−3 個の整数を選ぶ組み合わせの総数に等しく M−4CN−3 となります。
以上の考察から、答えは 3≤N,5≤M ...s において M−2CN+(M−4CN−1+M−4CN−2)+M−2CN−1+(M−4CN−2+M−4CN−3) です。
N,M の値がsを満たさない場合について考えます。
- N=2 の場合、1 ~ M の中から 2 つ選んで取り出し、適切に並び変えることで {2,4} 以外の組み合わせにおいては条件を満たす数列を構築できます。答えは M=2,3 のとき MC2 、4≤M のとき MC2−1 です。
- 3≤N≤M<5 の場合、A として考えられる数列 MN 通りを全列挙し、そのそれぞれについて条件を満たすかどうか判定すればよいです。(条件を利用することでもっと候補を絞り込めるので、手計算で各 (N,M)=(3,3),(3,4),(4,4) について答えを求めても良いです。)
計算量について考えます。
-
N,M がsを満たす場合については、
答えは階乗とその逆元の値を前計算しておくことで O(1) で求めることができます。よって、全体として時間計算量は前計算がボトルネックとなり O(max(N,M))=O(M) であるため、実行時間制限に間に合います。
-
N,M がsを満たさない場合について、
-
N=2 の場合、MC2 は O(1) で計算できるので、全体としても O(1) で求めることができます。
-
3≤N≤M<5 の場合、 A として考えられる数列 MN 通りを全列挙し、そのそれぞれについて条件を満たすかどうか O(N2) で判定すればよいです。全体の計算量は O(MNN2) ですが、N≤M≤4 より 余裕で実行時間制限に間に合います。手計算で各 N,M について答えを求めてコードに埋め込めば O(1) でいけます。
追記
- ab<ba を満たすような a,b の値の条件
とりあえず、与えられた不等式を変形してみます。a,b の少なくともどちらか一方が 1 のときや、a=b のときの大小関係は明らか(a=1 かつ a=b のときのみ不等式成立)であるため、a=b,2≤a,b の場合を考えます。
ab<ba⟷bloga<alogb⟷logbb<logaa
ここで、 f(x)=logxx とおくと ab<ba⟷f(b)<f(a) が成り立てば良いと分かります。
また、 f(x) のグラフを微分して描いてみると、0<x の部分においてグラフは下に凸の形をしており x=e≒2.71 のとき極小値をとることが分かります。よって、(e<)3≤b<a のときは不等式が成り立ちます。
では、a,b のどちらか一方が 2 のときはどうなるのでしょうか。まず、a=2 のときを考えてみます。
2b<b2⟷2b−b2<0
ここで、b>0 において 2b−b2=0 の解は b=2,4 であり、2b−b2<0 を満たす正整数 b は b=3 のみであるため、(a,b)=(2,3) のときのみ不等式が成り立ちます。
b=2 のときは、a2<2a⟷2a−a2>0 より、a=2 のときと同様にして考えると a が 2,3,4 以外の正整数であれば不等式が成り立ちます。
これまでの考察をまとめます。
不等式が成り立つのは、(a,b) が以下の条件のうちいづれかを満たすときです。
- a=1 かつ a<b
- 3≤b<a
- (a,b)=(2,3)
- a=2,3,4 かつ b=2
実装例