• <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>
            隨筆 - 68  文章 - 57  trackbacks - 0
            <2010年2月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28123456
            78910111213

            常用鏈接

            留言簿(8)

            隨筆分類(74)

            隨筆檔案(68)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            【題目大意】
              猴子和Kruskal玩一個取石子游戲,給定n堆石子,n不大于200,每堆石子的個數(shù)大于2小于2 ^ 32,雙方輪流取子,每次可以從一堆中取最多k個,當(dāng)一方取完石子后某堆石子的個數(shù)是素數(shù)的話那么當(dāng)前玩家獲勝。問猴子是否有必勝策略。

            【題目分析】
              這是一道BT題,中間設(shè)置了許多trick。開始對題意沒有完全理解,錯了很多次,后來找來了數(shù)據(jù),才發(fā)現(xiàn)了問題。
              題目中描述的獲勝策略是:"A player wins if after his move the size of some heap is a prime number."這句話乍一看以為是取完石子后剩下的石子個數(shù)是素數(shù)的時候就獲勝,其實還隱藏著另一種可能:如果多堆石子個數(shù)是素數(shù),當(dāng)前玩家無論怎樣取都能獲勝,因為在他取完之后,其他堆的石子個數(shù)是素數(shù),也滿足獲勝條件。
              接下來考慮一般情況。這個題目是限制中間狀態(tài)的Nim游戲,也就是說,對于一堆個數(shù)為n的石子而言,它的SG值取決于小于n的最大素數(shù)。注意這里題設(shè)又有了一個小trick,題目說明了需要取1到k個,如果當(dāng)前石子個數(shù)本身是素數(shù),當(dāng)然是沒用的,因此是小于n的最大素數(shù)。設(shè)小于n的最大素數(shù)是p(題目中說明了石子個數(shù)大于2,因此p一定存在),那么可以在k步以內(nèi)到達(dá)p的一定是必勝態(tài),而且是直接獲勝,需要在輸入的時候特判(這一點需要注意,在解決限制中間狀態(tài)的Nim游戲時一般都需要特判)。然后就是p + k + 1這個狀態(tài),因為它可達(dá)的狀態(tài)全是必勝態(tài),因此它是必敗態(tài),SG值為0。現(xiàn)在考慮大于p + k + 1的狀態(tài),問題出來了。以p + k + 2這個狀態(tài)為例,因為它可以到達(dá)p + 2 ... p + k + 1這些狀態(tài),因為p + 2 ... p + k都是直接獲勝狀態(tài),如何判定他們的SG值呢?如果假設(shè)它們的SG值是1,那么p + k + 2這個狀態(tài)的SG值應(yīng)該是2。但是思考一下SG值的定義,它是定義在一個DAG上的,所有的狀態(tài)最后都是可以在有限步內(nèi)轉(zhuǎn)移到終止態(tài)(必敗態(tài))。但是p + 1 ... p + k這些狀態(tài)都轉(zhuǎn)移到了p這個狀態(tài)上,我們肯定不能認(rèn)定p狀態(tài)是終止態(tài),因此僅僅憑借p + 1 ... p + k這些狀態(tài)是必勝態(tài)就簡單的把它們的SG值設(shè)為1是不恰當(dāng)?shù)?;這些限制狀態(tài)和以前的題目還不同,這些限制狀態(tài)都不能轉(zhuǎn)移到終止態(tài)上,但是由于題目的要求,它們又都是必勝態(tài),因此把它們的SG值設(shè)為無窮大更合適些。
              仔細(xì)思考一下帶限制狀態(tài)的SG游戲,可以發(fā)現(xiàn),它們和一般的SG游戲的區(qū)別在于,在分析一般的SG游戲的時候,對于一個狀態(tài)圖而言,轉(zhuǎn)移到終止態(tài)的時候并不意味著游戲結(jié)束,因為玩家可以通過走其他的狀態(tài)圖來保證是否達(dá)到必勝態(tài);但是帶限制狀態(tài)的SG游戲,限制的狀態(tài)雙方都是不敢走的,因為一旦一方走入限制狀態(tài),另一方立刻獲勝,游戲就終止了??梢哉J(rèn)為,只要走入限制態(tài)就相當(dāng)于認(rèn)輸,對于雙方玩家而言肯定都不會這樣做,因此這些限制狀態(tài)就成了“死狀態(tài)”,完全可以忽視這些狀態(tài)(也就是說不存在到這些狀態(tài)的轉(zhuǎn)移)。通過上述分析,我們可以認(rèn)定p + k + 2這個狀態(tài)的SG值應(yīng)該是1而不是2。
              現(xiàn)在這個問題的做法就比較明朗了,對于每堆石子,去掉限制態(tài)的討論后,就變成了在集合{1...k}中選擇元素的一個Subtraction Game,它的SG值是模(k + 1)循環(huán)的。
              然后就是求最近素數(shù)的問題了,這個沒有好辦法,只能暴力枚舉。對于一個數(shù)n,在sqrt(n)到n之間存在素數(shù)(感覺應(yīng)該是,但是不會證),因此最多枚舉sqrt(n)次就能找到解。但是每次枚舉判素的復(fù)雜度還是sqrt(n),總復(fù)雜度還是比較高,我在本地跑數(shù)據(jù)跑了3秒,交上去超時了(SPOJ的時限10秒,這居然也超時,數(shù)據(jù)夠變態(tài))。想了很久也沒有什么新的算法,無奈只能在判素上下點功夫,直接把Miller-Rabin搞出來了,速度提高到了2秒,仍然超時。后來又加了一些常數(shù)上的優(yōu)化,終于過了。

            【總結(jié)】
              這個題目做了很長時間,一方面是審題不清,錯了幾次;另一方面是對于SG的理論理解的不夠透徹,想了很久終于想明白了;再有就是優(yōu)化算法也花了很長時間。不過通過這個題目對于SG理論的理解又進(jìn)了一步,感覺不錯,呵呵。

            注:本文作于2009年8月6日 9點27分

            posted on 2010-02-06 09:04 sdfond 閱讀(345) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm - Number Theory 、Algorithm - Ad Hoc
            久久青青国产| AAA级久久久精品无码片| 久久99中文字幕久久| www性久久久com| 国产毛片久久久久久国产毛片 | 国内精品久久久久久久coent| 久久国产视屏| 久久大香萑太香蕉av| 久久99久久99小草精品免视看| 久久丝袜精品中文字幕| 国内精品久久久久影院优| 日韩欧美亚洲国产精品字幕久久久 | 伊人久久大香线蕉AV色婷婷色| 2020久久精品国产免费| 久久有码中文字幕| 国产成人精品久久一区二区三区| 欧美日韩成人精品久久久免费看| 精品久久久久久亚洲精品| 亚洲精品无码久久久久AV麻豆| 99久久成人国产精品免费 | 狠狠色丁香婷婷久久综合不卡| 伊人久久精品影院| 精品人妻伦九区久久AAA片69| 久久99亚洲网美利坚合众国| 少妇无套内谢久久久久| 久久99精品国产麻豆不卡| 91久久精一区二区三区大全| 亚洲中文字幕无码久久2017| 国产欧美久久久精品影院| 精品久久久久久久久久久久久久久| 国产亚洲精品自在久久| 99久久精品国产一区二区| 狠狠色丁香久久婷婷综合_中| 久久精品国产精品亚洲艾草网美妙| 久久精品免费观看| 亚洲国产精品久久久久| 久久99中文字幕久久| 久久综合九色综合精品| 亚洲精品国产成人99久久| 国产精品免费久久久久久久久| 国产91久久综合|