题意:http://www.lydsy.com/JudgeOnline/problem.php?id=3609
sol :博弈论
通过打表找规律,发现答案是%m循环的,且当m为偶数时取反
因为我太蒟蒻了QAQ,给不出证明
我是这么想的:
首先对于一组n,m,假如两个人都往一堆上放,满了以后再放下一堆,设赢的人为甲,输的人为乙
那么甲一定会尽力维持这个局面,乙则会去破坏该局面,即乙会额外新开一堆
那么甲会每次将乙新开的那堆往自己的一堆上放,最后形成若干个大小为m的堆以及两个和>m的堆
所以答案%m循环,至于m为偶取反可以打表看出来QAQ
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int n,m,a,b,ans; int main() { int T;scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); a=(n-1)%m%2,b=(n-1)/m%2; ans=a^1; if(m%2==0) ans^=b; printf("%d ",ans); } return 0; }