題目連結:
d541: “∧”形排列
題目大意:給定N(N ≦ 2000000000),求出1~N的正整數的排列數裡面,符合先遞增再遞減(12543這種)或是只遞增、遞減的方法數(取1234567的餘數)。
解題思維:
先觀察N=2,有12、21,2種;N=3,有123、231、132、321,這4種方式;再來,N=4,有1234、2341、1342、1243、3421、2431、1432、4321,這8種。
因此,猜測所求方法數為2 ^ (N-1)種(N=0設為0種)。而這個猜測為「真」的緣由是因為一個排列組合的基本性質。
觀察N=3的方法,可以發現其架構等同於以下:從1~2取0個數放到3的後面(123)+1~2取1個數放到3的後面(231及132)+1~2取2放到3後面(321)。也就是總方法數為C2取0+C2取1+C2取2=4=2 ^ 2。
同理,N=4時為C3取0+C3取1+C3取2+C3取3=8=2 ^ 3。
因為巴斯卡三角形與(X+1)^ N的係數有著密切關係,所以當X=1時,巴斯卡三角形的第N列的數之和正是2 ^ N。而這剛好也是我們題目的所求。
但是由於題目給定的N可以到20億,所以需要快速冪來幫忙加速。快速冪:參見
之前的文章的大概中後的段落。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大們可以提出來討論。