• <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

            開始尋找規律,找了好久想不出,最終想到了追蹤第一張牌來進行求解!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
            ++;//表示排序的次數 
                    }

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

            }


            雖然做時不知道為什么!但是事后我在網上搜到了證明方法!

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

            定理1:當第一張牌(牌1)回到初始位置時,所有的牌都回到了初始位置。

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

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

            現在我們來證明定理2。運用反正法,若牌1永遠不能回到初始位置,根據鴿籠定理,牌1必然陷入了某個不包含位置1的循環,因為下一狀態僅和當前狀態有關,當前狀態最多只有2*N種,所以顯然一定在不超過2*N+1次操作內出現重復狀態。而重復狀態則意味著循環。
            因為我們假設這一循環不包括位置1,我們設f(i)為循環中某狀態,f(0)=1,f(n+1)=(f(n)*2)%(2*N+1),f(j)為若干次循環后出現的重復狀態,即f(i)=f(j)。因為循環一直持續,不妨假設j>i+i。又因為循環不包括狀態1,即對于任意的k>=i,f(k)!=1
            根據定理2.1,我們可以根據當前狀態推出上一狀態,換句話說,若f(i)=f(j),則f(i-1)=f(j-1)。繼續套用定理2.1,可以得到f(i-i)=f(j-i),即:f(j-i)=f(0)=1。又有假設j>i+i,即j-i>i,與另一假設對于任意的k>=i,f(k)!=1矛盾。
            因此,可以證明,牌1所陷入的循環,必然是包含位置1的,即一定有某次操作,操作后牌1回到了初始狀態。而且顯然的,初始狀態就是這循環中的一個狀態。
            因此命題得證。
            posted on 2009-04-21 16:34 zhoubaozhong 閱讀(651) 評論(0)  編輯 收藏 引用
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(3)

            隨筆檔案

            杭電!!

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久九九亚洲精品| 亚洲伊人久久综合影院| 少妇人妻综合久久中文字幕 | 亚洲国产精品无码久久久不卡 | 亚洲国产美女精品久久久久∴| 四虎久久影院| 久久AV无码精品人妻糸列| 伊色综合久久之综合久久| 一本久久综合亚洲鲁鲁五月天| 看全色黄大色大片免费久久久| 久久精品一区二区影院| 婷婷久久精品国产| 久久久久久久免费视频| 亚洲国产一成人久久精品| 亚洲AV无码久久精品色欲| 色偷偷88888欧美精品久久久| 久久精品天天中文字幕人妻| 久久人妻少妇嫩草AV无码专区| 亚洲αv久久久噜噜噜噜噜| 精品熟女少妇av免费久久| 久久不射电影网| 久久久久亚洲?V成人无码| 亚洲精品国产自在久久| 亚洲va中文字幕无码久久不卡| 亚洲成色999久久网站| 久久青青草原精品国产不卡| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲国产精品嫩草影院久久| 无码AV中文字幕久久专区| 91精品国产综合久久四虎久久无码一级 | 女人高潮久久久叫人喷水| 热久久视久久精品18| 日韩人妻无码一区二区三区久久| 亚洲午夜久久久久久久久电影网| 97精品国产91久久久久久| 久久久久国产一区二区| 99久久免费国产精品热| www.久久99| 久久夜色精品国产www| 97精品伊人久久大香线蕉| 精品国际久久久久999波多野|