BoB004-E: Sorted Permutation

2 secs 1024 MB
kyaneko999's icon kyaneko999

解説

AA を昇順に並び替えたものを BB すると,PP が条件を満たすことは B=(AP1,AP2,,APN)B=(A_{P_1},A_{P_2},\dots,A_{P_N}) が成り立つことと同値です.
AA の中で値が XX であるようなものが Ai1,Ai2,,AicA_{i_1},A_{i_2},\dots,A_{i_c}cc 個であるとします.
BB においては XX は連続して cc 個並んでおり,ある jj について Bj=Bj+1==Bj+c1=XB_j=B_{j+1}=\cdots=B_{j+c-1}=X のようになっています.
よって,(Pj,Pj+1,,Pj+c1)(P_{j},P_{j+1},\dots,P_{j+c-1})(i1,i2,,ic)(i_1,i_2,\dots,i_c) の並び替えになっている必要があり,そのような並び替えは c!c\,! 通り存在します.
以上をすべての XX について考えることで答えを求めることができます.
すなわち,AA には MM 種類の数 X1,X2,,XMX_1,X_2,\dots,X_M が含まれるとし,XiX_i が含まれる個数を cic_i とすると,答えは c1!×c2!××cM!c_1!\,\times c_2!\,\times\cdots\times c_M! です.

解答例(Python)