★★★ 輸入檔案:首先我們可以發現, 將 $n$ 個數排序的過程可以轉化為按方案排序 $n-1$ 個數後將最後乙個數按方案再排進去. 對於長度為 $n$ 的全排列, 若第 $n$ 個數 $a_n=n$ , 則不會引起計數器變動(因為它在前 $n-1$ 個排好序後就已經在最後了), 否則會引起計數器增加 $2^$ . 列舉最後加入的數 $a_n$ 即可在 $o(n^2)$ 時間複雜度內解決. 最終表示式為:xvii.in
輸出檔案:xvii.out
簡單對比時間限制:1 s 記憶體限制:256 mb
七十君最近愛上了排序演算法,於是ta讓十七君給ta講氣泡排序。
十七君給七十君講完了氣泡排序以後,七十君回家苦思冥想,又創造了一種名
為七十排序的演算法。下面是這個演算法排序乙個排列的過程:
首先從左到右掃瞄每個相鄰數對。如果這兩個數是逆序的,則將第二個數(也
就是小的數)放在整個排列的開頭,其他數字置不變,並把計數器加一。如果
沒有逆序的相鄰數對了,就說明已經排好序了,演算法終止。
七十君認為計數器的值反映了這個演算法的執行時間。但十七君覺得七十君發明
的這個演算法會很慢,所以他請你幫忙算算,對於所有長度為n的排列p,
\[e(n)=\frac\]
的值,這裡f(p)表示排列p執行演算法結束時計數器的值。
一行乙個整數n。
如果e(n)=a/b,求c使得
bc 三 a (mod 10^9+7)
並輸出,其中0≤c<10^9+7,如果e不存在輸出-1。
4250000005對於排列4 1 3 2,演算法結束時計數器的值為5。4 1 3 2,4和1形成逆序,將1放到排列最前方。
1 4 3 2,4和3形成逆序,將3放到排列最前方。
3 1 4 2,3和1形成逆序,將1放到排列最前方。
1 3 4 2,4和2形成逆序,將2放到排列最前方。
2 1 3 4,2和1形成逆序,將1放到排列最前方。
1 2 3 4,現在排列已經排序完畢。
e(4)=3.25。
資料範圍與約定
對於20%的資料,n≤8。
對於40%的資料,n≤30。
對於60%的資料,n≤200。
對於1oo%的資料,n≤10^5。
\[ans=\sum_^n\sum_^2^\]
注意到第二部分求和為等差數列形式, 我們可以通過等差數列求和公式進行計算. 於是上式可以化簡為:
COGS 2066 七十與十七
七十君最近愛上了排序演算法,於是ta讓十七君給ta講氣泡排序。十七君給七十君講完了氣泡排序以後,七十君回家苦思冥想,又創造了一種名 為七十排序的演算法。下面是這個演算法排序乙個排列的過程 首先從左到右掃瞄每個相鄰數對。如果這兩個數是逆序的,則將第二個數 也 就是小的數 放在整個排列的開頭,其他數字置...
洛谷2066 機器分配
總公司擁有高效裝置m臺,準備分給下屬的n個分公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但總台數不超過裝置數m。輸入格式 第一行有兩個數,第乙個數是分公司數n...
luogu p2066 機器分配
做做就知道了 關鍵是我犯了乙個 的問題 我把j當作了機器的下標 然後做了n遍 都沒過 由此可以看出 好了 廢話不多說 開始分析題 要將m臺裝置分給n個公司 按照公司的順序來分配機器,即按照公司的順序劃分階段,第乙個階段把m臺裝置分給第乙個公司,記錄下來獲得的各個盈利值,然後把m臺裝置分給前兩個公司,...