• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            poj 2085 Inversion 求逆序列


            http://acm.pku.edu.cn/JudgeOnline/problem?id=2085
             

            給定整數N,和一個序列的逆序數M,求以1,2...N為元素,逆序為M,且按字典序最小的那個序列。

            只要知道這樣一個事實:一個序列的逆序唯一決定了這個序列。

            例如:序列1,4,3,2的逆序為1--0,2--2,3--1,4--0,可以用一個四維坐標來表示(0,2,1,0),第i維的數是 i 在原序列中的逆序數,取值范圍是0,1...4-i。

            為解決這個問題,以N=4,逆序數M=5為例。

            1 2 3 4
            最大逆序 3 2 1 0

            對這個問題可以采取貪心策略。
            首先,如果所求序列以1為首,則1的逆序為0,可以從上表看出此時序列的逆序數最多為2+1=3<5,不滿足。考慮以2為首,序列的逆序最多為3+1<5,不滿足。
            考慮以3為首,可見當1的逆序為3,2的逆序為2,4的逆序為0時滿足要求,這時1,2,4均為最大逆序,因而只能排列為4,2,1,加上首數,所求序列為3,4,2,1。

            若M=3,采取同樣的貪心策略,可求得結果為1,4,3,2。

            依此思路,可以得到所求序列關于N,M的關系式,具體如下:
            1,2,3,...N-P,  N-((p-1)*p/2-M),  N  ,  N-1...N-P+1.(P是滿足(P-1)*P/2>=M的最小值)。
            代碼就容易多了。
            關于更多排列的內容可參考:/Files/sdz/s.doc
            #include <stdio.h>
            int main(int argc, char *argv[])
            {
                
            int n,m;
                
            int p,temp,i;
                
            while(scanf("%d%d",&n,&m) && n>0)
                
            {
                    p
            =1;
                    
            while((p*(p-1))/2<m)p++;
                    temp
            =(p*(p-1))/2;
                    
            for(i=1;i<=n-p;i++)
                        printf(
            "%d ",i);
                    printf(
            "%d ",n-temp+m);
                    
            for(i=n;i>=n-p+1;i--)
                    
            {
                        
            if(i!=n-temp+m)
                            printf(
            "%d ",i);
                    }

                    printf(
            "\n");
                }

                
            return 0;
            }



            posted on 2010-08-13 16:13 若余 閱讀(1945) 評論(3)  編輯 收藏 引用

            評論

            # re: poj 2085 Inversion 求逆序列[未登錄] 2010-08-13 23:04 Klion

            只要知道這樣一個事實:一個序列的逆序唯一決定了這個序列。
            樓主,對這個不是很理解,望解釋。
            比如
            4 5 3 2 1和5 3 4 2 1的逆序數都是9,或許是我理解有問題?  回復  更多評論   

            # re: poj 2085 Inversion 求逆序列 2010-08-14 09:43 sdz

            4 5 3 2 1各個數的逆序是1--4,2--3,3--2,4--0,5--0,可以用(4,3,2,0,0)表示這個序列。

            同理,可以用(4,3,1,1,0)表示5 3 4 2 1。
            (4,3,2,0,0)和(4,3,1,1,0)當然是不同的。

            精確描述如下:
            令b1, b2,…, bn為滿足
            0<=b1 <=n-1, 0<=b2 <=n-2, …, 0<=bn-1 <=1, bn =0
            的整數序列,那么存在集合{1,2,…,n}的唯一一個排列,使它的逆序列為b1, b2,…, bn 。


            這個問題中運用貪心策略可以逐步確定逆序列,因而可以確定原序列.  回復  更多評論   

            # re: poj 2085 Inversion 求逆序列[未登錄] 2010-08-14 15:35 Klion

            @sdz
            謝謝博主,是我理解錯了。  回復  更多評論   

            導航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統計

            常用鏈接

            留言簿

            隨筆檔案(16)

            搜索

            最新隨筆

            最新評論

            評論排行榜

            欧美综合天天夜夜久久| 国产精品狼人久久久久影院 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 国产午夜精品理论片久久| 欧美精品福利视频一区二区三区久久久精品| 国内精品久久久久久久久电影网| 久久亚洲天堂| 亚洲成色WWW久久网站| 九九99精品久久久久久| 亚洲精品国产综合久久一线| 久久精品一本到99热免费| 91久久福利国产成人精品| 久久天天躁狠狠躁夜夜2020一| 97精品伊人久久久大香线蕉| 精品久久久久久无码不卡| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久受www免费人成_看片中文| 少妇内射兰兰久久| 久久AAAA片一区二区| 久久婷婷五月综合国产尤物app| 欧美精品丝袜久久久中文字幕| 国产91色综合久久免费| 亚洲国产成人久久综合一区77 | 久久亚洲精品国产精品| 久久久久亚洲爆乳少妇无| 麻豆精品久久久一区二区| 久久精品毛片免费观看| 久久精品免费一区二区| 亚洲人AV永久一区二区三区久久| 精品久久久无码中文字幕天天| 久久久精品人妻一区二区三区四 | 日本一区精品久久久久影院| 亚洲AV无码久久精品成人 | 色婷婷噜噜久久国产精品12p| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 99久久人人爽亚洲精品美女| 久久久久久亚洲精品无码| 国产激情久久久久影院小草| 国产精品久久一区二区三区| 青青青国产精品国产精品久久久久| 久久久久久久97|