題目: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都非常聰明,拿石子的...