题意:
两个人玩加法游戏,谁先加到>= n,谁胜利,每次每一个人只能加1~m区间的数字。
利用第二条性质,可以直接打出表。博弈真是一个妖怪!换了一道题,我竟然还用原来的方法,看来未得真谛,所以要多多思考,当前局面和必败局和必胜局的关系。
#include <iostream> #include <cstdio> #include <cstring> #include <set> using namespace std; const int maxn = 10105; int n,m; int sg[maxn]; void SG() { sg[0] = 0; for(int i = 0;i <= n; i++) { if(sg[i] == 0) { for(int j = 1;j <= m; j++) { sg[i+j] = true; } } } } int main() { //freopen("in.txt","r",stdin); int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(sg,0,sizeof(sg)); SG(); if(sg[n]) printf("Grass\n"); else printf("Rabbit\n"); } return 0; }