取石子遊戲與SG函式

2021-06-19 08:53:36 字數 1251 閱讀 9737

題目:

題意:有3堆石子,石子數量分別為a,b,c,有兩個玩家,每次只能從任意一堆中取f個,這裡的f只能為fibnacci數,問是先手

還是先手敗.

分析:由於石子的數量都在1000以內,那麼我們可以先預處理出1000以內的sg函式值,然後對於3堆石子,我們進行異或,如果為

0說明先手必敗,否則必勝,當然求sg函式的值用深搜就行了.

#include #include #include using namespace std;

const int n = 1005;

const int m = 25;

int fib[25];

int sg[n];

int mex(int x)

{ bool vis[m];

memset(vis,0,sizeof(vis));

for(int i=0;i

題目:

分析:本題基本上跟上體一樣,只是把3堆改為x堆,把取fibnacci數列顆石子改為取指定輸入的石子個數.那麼做法實際上一

樣,我們對輸入的序列進行排序,然後求出它們的sg函式的值,然後直接用即可.

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

const int n = 10005;

const int m = 105;

int a[m];

int sg[n];

int n;

int mex(int x)

{ bool vis[m];

memset(vis,0,sizeof(vis));

for(int i=0;i

取石子(sg函式)

alice和bob有n桶石子,裡面有ai個,他們每次只能其中一某堆裡取奇數個,不能拿的人輸,alice總是先拿 1 n 200,1 ai 1e9 input 第一行為 n 第二行為 n個數 ai output 最後獲勝的人alice或bob sample input 33 2 1 sample ou...

石子遊戲 SG函式

problem description alice 和 bob 總喜歡聚在一起玩遊戲 t t 今天他 她 們玩的是一款新型的取石子遊戲。遊戲一開始有n堆石子,alice 和 bob 輪流取出石子。在每次操作中,遊戲者必須選擇其中的一堆石子,並作出下列的其中一種操作 1 移去整堆石子 2 假設石子堆中...

SG 分石子遊戲

時間限制 2000 ms 記憶體限制 65535 kb 難度 6 描述 閒來無事,zyc發明了一種遊戲,叫分石子遊戲,初始有d堆石子,每堆石子的數量已知。兩個人輪流分石子,可以選取這d堆石子中的任意一堆,然後把選中的這堆石子分成m堆 每堆石子數量都必須大於0 現在石子的堆數將變成d m 1堆,對方就...