COGS 2066 七十和十七

2022-02-27 06:34:27 字數 1798 閱讀 4846

★★★   輸入檔案: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。

4
250000005
對於排列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。

首先我們可以發現, 將 $n$ 個數排序的過程可以轉化為按方案排序 $n-1$ 個數後將最後乙個數按方案再排進去. 對於長度為 $n$ 的全排列, 若第 $n$ 個數 $a_n=n$ , 則不會引起計數器變動(因為它在前 $n-1$ 個排好序後就已經在最後了), 否則會引起計數器增加 $2^$ . 列舉最後加入的數 $a_n$ 即可在 $o(n^2)$ 時間複雜度內解決. 最終表示式為:

\[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臺裝置分給前兩個公司,...