求sg值 分析與找規律

2021-07-22 04:05:58 字數 1302 閱讀 2695

題目:hdu1517

題意:你和乙個人玩遊戲,給你乙個數字n,每次操作可以從2~9中任選乙個數字,並把它與p相乘,(遊戲開始時p=1)

兩人輪流操作,當乙個人操作完後p>=n,這個人就是勝者。

解答:方法一:寫個求sg值的函式,然後找規律。

方法二:首先,有以下結論:1.任意操作都可將奇異局勢變為非奇異局勢。(必敗狀態轉換為必勝狀態)

2.採用適當的方法,可以將非奇異局勢變為奇異局勢

。(必勝狀態轉換為必敗狀態)

(即轉化為必敗態需要一些條件)

我們解決這個問題,就是要求sg[1]的值是否為0.首先,當乙個狀態x>=n的時候肯定是必敗的。而當這個必敗狀態除以9(並且向上取整),它就可以轉換為必勝狀態。再除以2(以後均為向上取整),又轉換為必敗狀態,因為如果某一範圍的數通過乘2到9可以轉換為必敗你依然有機會贏。所以它除以2(向上取整),它

就沒辦法保留必敗狀態,所以你仍然會輸。所以就如此往復。除以9變為必勝,除以2變為必敗。

方法一的**(自己找規律發現的)

#include #include #include #include using namespace std;

int n;

int main()

return 0;

}

附:打表的時候求sg函式的**:

#include#include#include#include#includeusing namespace std;

const int maxn = 10000;

int n;

int sg[maxn];

int getsg(int v)

else

}for(int i = 0;;i++)

}}int main()

return 0;

}

#include #include #include #include #include using namespace std;

int n;

int main()

puts(x&1?"stan wins.":"ollie wins.");

}return 0;

}

附:

函式名: ceil(向上取整)

用 法: double ceil(double x);

功 能: 返回大於或者等於指定表示式的最小整數

標頭檔案:math.h

返回資料型別:double

另外,向下取整函式為floor.

邂逅明下 博弈 SG打表找規律)

當日遇到月,於是有了明。當我遇到了你,便成了侶。那天,日月相會,我見到了你。而且,大地失去了光輝,你我是否成侶?這注定是個淒美的故事。以上是廢話 小t和所有世俗的人們一樣,期待那百年難遇的日食。駐足街頭看天,看日月漸漸走近,小t的脖子那個酸呀 他堅持這個姿勢已經有半個多小時啦 他低下仰起的頭,環顧四...

博弈 Bash遊戲 V3(SG 打表找規律)

有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次拿的數量只能是2的正整數次冪,比如 1,2,4,8,16 拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n,問最後誰能贏得比賽。例如n 3。a只能拿1顆或2顆,所以b可以拿到最後1顆石子。輸入的n可能為大數 第1行...

1068 Bash遊戲 V3 (sg打表找規律)

1068 bash遊戲 v3 ural 1180 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次拿的數量只能是2的正整數次冪,比如 1,2,4,8,16.拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的...