这是一道几乎没有变形的NIm博弈,就像一个人只是剪了头发一样的,没有什么别的,他想说的是每次捐款不超过m元,最开始达到或者超过n的获胜,你就是需要计算sg[n]他的值是多少这就完了,当然这题太水了,没有一点技术含量,如果规定只能是1,2,5,10的捐钱那就有点麻烦了,这个时候我们就需要讨论一下,也就是说有一堆n颗石子,每次最多取m但是在这去的过程之中每次只能按照1,2,,5,10的个数来取,这就转换成为只能取固定的数量了,这个就不多说了,下面还是给出一个AC的代码:
#include<iostream> using namespace std; int main() { int n,m; int N; cin>>N; while(N--) { cin>>n>>m; //cout<<n<<" "<<(m+1)<<endl; if((n%(m+1))==0) cout<<"Rabbit"<<endl; else cout<<"Grass"<<endl; } return 0; }