• <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 2348 Euclid's Game 博弈 取子

            Euclid's Game
            Time Limit: 1000MS Memory Limit: 65536K
            Total Submissions: 4525 Accepted: 1849

            Description

            Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser of the two numbers from the greater of the two numbers, provided that the resulting number must be nonnegative. Then Ollie, the second player, does the same with the two resulting numbers, then Stan, etc., alternately, until one player is able to subtract a multiple of the lesser number from the greater to reach 0, and thereby wins. For example, the players may start with (25,7):
                     25 7
            
            11 7
            4 7
            4 3
            1 3
            1 0

            an Stan wins.

            Input

            The input consists of a number of lines. Each line contains two positive integers giving the starting two numbers of the game. Stan always starts.

            Output

            For each line of input, output one line saying either Stan wins or Ollie wins assuming that both of them play perfectly. The last line of input contains two zeroes and should not be processed.

            Sample Input

            34 12
            15 24
            0 0
            

            Sample Output

            Stan wins
            Ollie wins
            

            Source

            Waterloo local 2002.09.28

            給定兩堆石子,二人輪流取子,要求只能從石子數目較大的那一堆取子,取子的數目只能是另一堆石子數目的倍數.最終使得某一堆數目為零的一方為勝.

            首先,容易看出,對于每一個局面,要么是先手必勝,要么是后手必勝,最終結果完全由當前局面完全確定.

            另外,可以簡單羅列一下先手必勝和必敗的幾種局面(兩堆石子初始數目都大于零):

            1,有一堆石子數目為一,先手必勝,? 1,4,??? 1,2.
            2,兩堆石子數目差一,且兩堆石子數目都不為一,先手必敗(只能使后手面對必勝的局面),如? 3,4? 5,6?? .
            3,如果數目較大的那一堆是數目較小那一堆的2倍加減一,且不是上面兩種局面,先手必勝,2,5? 3,5? 3,7.

            可是上面這些信息對于解決這個問題還是有一些困難.

            再進一步試算數目較小的石子,可以發現,當兩堆數目相差較大時,總是先手必勝.
            事實上,進一步探討可以發現下面的結論:

            1,N<2*M-1時,先手別無選擇,只能使之變為 N-M,M 局面,(易見)如3,5? 5,7? 7,4...

            2,設兩堆石子數目為N,M(N>M>0,且N,M互質),則若N>=2*M-1,且N - M ! =1時,先手必勝.要求M,N互質是因為對于M,N有公因數的情形,可以同時除以其公因數而不影響結果.

            簡單說明一下上面結論2的由來. N>=2*M-1時,先手可使之變為? N%M,M? 或N%M+M,M兩種局面之一,其中有且只有一個必敗局面。注意到如果N%M,M不是必敗局面,那么N%M+M,M就是必敗局面,因為面對N%M+M,M這個局面,你別無選擇,只能在前一堆中取M個使對方面對必勝局面(結論1 )。


            據此可設計算法如下:
            1.M,N先同時除以它們的最大公因數.(M<N)
            2,如果M==0,則返回零;
            3,如果M==1,則返回一;
            4,如果N>=M*2-1,則返回一
            5,令N=M,M=N-M,遞歸處理

            #include?<iostream>
            using?namespace?std;
            long?long?gcd(long?long?a,long?long?b)
            {
            ????
            if(a==0)
            ????????
            return?b;
            ????
            return?gcd(b%a,a);
            }

            long?long?Eu(long?long?m,long?long?n)
            {
            ????
            if(m==1)
            ????????
            return?1;
            ????
            if(n-m==1?&&?m)
            ????????
            return?0;
            ????
            if(n>=m*2-1)
            ????????
            return?1;
            ????
            return?!Eu(n%m,m);
            }


            int??main()
            {
            ????
            long?long?m,n,temp;
            ????
            while?(cin>>m>>n?&&?(m||n))
            ????
            {
            ????????
            long?long?g=gcd(m,n);
            ????????m
            /=g;
            ????????n
            /=g;
            ????????
            if(m>n)
            ????????
            {
            ????????????temp
            =m;
            ????????????m
            =n;
            ????????????n
            =temp;
            ????????}

            ????????
            if(Eu(m,n))
            ????????????cout
            <<"Stan?wins"<<endl;
            ????????
            else
            ????????????cout
            <<"Ollie?wins"<<endl;
            ????}

            ????
            ????
            return?0;
            }




            posted on 2010-08-29 09:27 若余 閱讀(1131) 評論(0)  編輯 收藏 引用

            導航

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            常用鏈接

            留言簿

            隨筆檔案(16)

            搜索

            最新隨筆

            最新評論

            評論排行榜

            亚洲国产精品婷婷久久| 久久久国产打桩机| 久久九九全国免费| 久久久久亚洲av成人无码电影| 久久天堂AV综合合色蜜桃网| AV无码久久久久不卡网站下载| 亚洲伊人久久大香线蕉苏妲己| 人妻系列无码专区久久五月天| 无码日韩人妻精品久久蜜桃 | 久久婷婷五月综合色奶水99啪| 久久精品国产亚洲一区二区| 一个色综合久久| 国产三级观看久久| 国产精品久久久亚洲| 最新久久免费视频| 精品久久久久久无码国产| 精品国产一区二区三区久久久狼 | 久久九九免费高清视频| 色婷婷综合久久久中文字幕| 日本亚洲色大成网站WWW久久| 99久久人妻无码精品系列| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 国产成人久久久精品二区三区| 青青草国产97免久久费观看| 久久99国产精一区二区三区| 嫩草伊人久久精品少妇AV| 国产成人精品综合久久久久| 亚洲精品无码专区久久同性男| 久久久免费观成人影院| 97久久精品人人澡人人爽| 久久最新精品国产| 一本久久久久久久| 国产精品激情综合久久| 国内精品久久久久久久久| 91麻精品国产91久久久久 | 久久久国产亚洲精品| 中文字幕精品久久久久人妻| 久久精品视频一| 亚洲AV无码久久精品狠狠爱浪潮| 久久天天躁狠狠躁夜夜avapp| 国产欧美久久久精品影院|