bzoj3609【HEOI2014】人人尽说江南好

题意: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\n",ans);
    }
    return 0;
}
posted @ 2017-02-25 16:32  Czarina  阅读(186)  评论(0编辑  收藏  举报