• <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>
            posts - 12,  comments - 10,  trackbacks - 0
            http://acm.hdu.edu.cn/showproblem.php?pid=1210

            開始尋找規(guī)律,找了好久想不出,最終想到了追蹤第一張牌來進(jìn)行求解!O(∩_∩)O~

            #include<stdio.h>
            int main()
            {
                
            long i,n,sum;
                
            while(scanf("%d",&n)==1){
                    sum
            =1;
                    i
            =2;//追蹤 1 的位置; 
                    while(i!=1){
                        
            if(i>n)
                              i
            =(i-n)*2-1;
                        
            else i*=2;
                        sum
            ++;//表示排序的次數(shù) 
                    }

                    printf(
            "%d\n",sum);
                }

            }


            雖然做時(shí)不知道為什么!但是事后我在網(wǎng)上搜到了證明方法!

            洗牌問題:
            很多人都是跟蹤第一張牌來完成的,大家會(huì)不會(huì)證明呢?

            定理1:當(dāng)?shù)谝粡埮?牌1)回到初始位置時(shí),所有的牌都回到了初始位置。

            證明:設(shè)有一次操作,某牌在操作前處于位置r(1<=r<=2*N),那么,操作后,如果r原來是前一半的,顯然r'=r*2; 否則,r'=(r-n)*2-1,即r'='r*2-(N*2+1);
            將兩個(gè)式子綜合,可以得到r'= (r*2)%(N*2+1);
            根據(jù)同余定理之一 ((i%m)*j)%m=(i*j)%M,可以整理出公式:i次操作后,該牌的位置為:
            (r*(2^i))%(N*2+1);其中^表示乘方。
            現(xiàn)在,我們假設(shè)經(jīng)過M次操作后,牌1回到了初始位置,即(1*(2^M))%(N*2+1)=1時(shí),再次應(yīng)用同余定理,可以證明對(duì)于任意的k(1<=k<=2*N),有(k*(2^M))%(N*2+1)=k,翻譯成自然語言就是:當(dāng)?shù)谝粡埮苹氐匠跏嘉恢脮r(shí),所有的牌都回到了初始位置。命題得證。

            定理2:一定存在某次操作M,這次操作后,所有的牌都回到了初始位置。
            證明:我們已經(jīng)證明了牌1回到初始位置時(shí),所有的牌都回到初始位置,所以我們只需要證明牌1可以回到初始位置,即(2^M)%(N*2+1)=1一定有正整數(shù)解。證明這個(gè)定理前我們首先證明這樣一個(gè)定理:
            定理2.1:(2*r)%(2*n+1)==t
            當(dāng)t確定為1到2*n中的某值時(shí)(1<t<=2*n),r在1到2*n間有唯一解
            因?yàn)?*n+1是奇數(shù),我們只要看一下就會(huì)發(fā)現(xiàn)r到t是一個(gè)一一映射,當(dāng)t為偶數(shù)時(shí),顯然r=t/2,當(dāng)t為奇數(shù)時(shí),r=(t+1)/2+n,

            現(xiàn)在我們來證明定理2。運(yùn)用反正法,若牌1永遠(yuǎn)不能回到初始位置,根據(jù)鴿籠定理,牌1必然陷入了某個(gè)不包含位置1的循環(huán),因?yàn)橄乱粻顟B(tài)僅和當(dāng)前狀態(tài)有關(guān),當(dāng)前狀態(tài)最多只有2*N種,所以顯然一定在不超過2*N+1次操作內(nèi)出現(xiàn)重復(fù)狀態(tài)。而重復(fù)狀態(tài)則意味著循環(huán)。
            因?yàn)槲覀兗僭O(shè)這一循環(huán)不包括位置1,我們?cè)O(shè)f(i)為循環(huán)中某狀態(tài),f(0)=1,f(n+1)=(f(n)*2)%(2*N+1),f(j)為若干次循環(huán)后出現(xiàn)的重復(fù)狀態(tài),即f(i)=f(j)。因?yàn)檠h(huán)一直持續(xù),不妨假設(shè)j>i+i。又因?yàn)檠h(huán)不包括狀態(tài)1,即對(duì)于任意的k>=i,f(k)!=1
            根據(jù)定理2.1,我們可以根據(jù)當(dāng)前狀態(tài)推出上一狀態(tài),換句話說,若f(i)=f(j),則f(i-1)=f(j-1)。繼續(xù)套用定理2.1,可以得到f(i-i)=f(j-i),即:f(j-i)=f(0)=1。又有假設(shè)j>i+i,即j-i>i,與另一假設(shè)對(duì)于任意的k>=i,f(k)!=1矛盾。
            因此,可以證明,牌1所陷入的循環(huán),必然是包含位置1的,即一定有某次操作,操作后牌1回到了初始狀態(tài)。而且顯然的,初始狀態(tài)就是這循環(huán)中的一個(gè)狀態(tài)。
            因此命題得證。
            posted on 2009-04-21 16:34 zhoubaozhong 閱讀(651) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(3)

            隨筆檔案

            杭電!!

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产国产成人久久精品| 亚洲精品美女久久久久99小说| 99久久这里只精品国产免费| 国产精品99久久久精品无码 | 久久中文字幕一区二区| 99久久精品毛片免费播放| 99久久99久久| 日产精品久久久久久久| 久久成人国产精品二三区| 天天综合久久一二三区| 精品久久久久久| 亚洲日本va中文字幕久久| 国产高清国内精品福利99久久| 99久久夜色精品国产网站| 亚洲国产精品久久66| 亚洲精品乱码久久久久久自慰 | 久久久久亚洲AV综合波多野结衣| 伊人色综合久久天天人守人婷| 久久亚洲高清观看| 久久人人爽人人爽人人爽| 日本福利片国产午夜久久| 精品国产乱码久久久久久郑州公司| 久久人人爽人爽人人爽av| 99国产欧美精品久久久蜜芽| 久久亚洲sm情趣捆绑调教 | 97久久国产露脸精品国产| 91精品国产色综久久| 久久精品国产亚洲77777| 亚洲国产精品综合久久一线| 欧美精品一区二区精品久久 | 色欲综合久久中文字幕网| 久久中文字幕精品| 亚洲欧美一级久久精品| 久久精品无码av| 亚洲国产高清精品线久久 | 无码人妻久久一区二区三区 | 人妻精品久久久久中文字幕69| 无码乱码观看精品久久| 怡红院日本一道日本久久| 国产精品天天影视久久综合网| 久久亚洲私人国产精品|