nyoj 913 取石子(十)

2021-08-19 16:53:40 字數 1062 閱讀 7872

sg函式打表

//f:可以取走的石子個數

//sg:0~n的sg函式值

//hash:mex{}

int f[n],sg[n],hash[n];

void getsg(int n)

中未出現的最小的非負整數}}

}

dfs
//注意 s陣列要按從小到大排序 sg函式要初始化為-1 對於每個集合只需初始化1遍

//n是集合s的大小 s[i]是定義的特殊取法規則的陣列

int s[110],sg[10010],n;

int sg_dfs(int x)

}int e;

for(i=0;;i++)

if(!vis[i])

return sg[x]=e;

}

分別把每一堆的sg函式計算出來,就可以利用組合遊戲的結論進行nim異或了

第一堆求出sg函式可以發現有規律0,1,2,0,1,2……迴圈

第二堆無規律求出sg2

第三堆sg[a]=a;

第四堆無規律求出sg4

第五堆規律0,1,0,1,0,1……

第六堆及其以後根據巴什博弈,sg[a]=a%(i+1);

#include#includeint f[25],sg2[1005],vis[1005];

int ff[1000],sg4[1005];

void fib()//斐波那契數

void get_ff()//1和偶數

}int get_sg2(int n)//第二堆sg

}return sg2[n];

}int get_sg4(int n)//第四堆sg

}return sg4[n];

}int main()

else if(i==2)

else if(i==3)

else if(i==4)

else if(i==5)

else

}if(f>0)

else

}}

NYOJ 取石子總結

nyoj的取石子有好多道,除了兩道難度為6的,剩下的在這兒簡單總結一下結論。取石子 一 有一堆石子共有n個,a和b輪流取,a先,每次最少取1個,最多取m個,先取完者勝,a,b足夠聰明,問誰先勝?比較簡單的巴什博弈,若n m 1 0,a勝,否則b勝。取石子 七 n個石子擺成一圈,a和b輪流取,每次可以...

NYOJ 取石子(一)

取石子 一 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1...

NYOJ 23 取石子(一)

時間限制 3000 ms 記憶體限制 65535 kb難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 1000...