La 5059 - Playing With Stones

来源:互联网 发布:plc编程证书 编辑:程序博客网 时间:2024/04/30 06:21

题目:La 5059 - Playing With Stones

思路:SG打表题


数据范围很大,一个一个搜不现实,输出前几项的SG值,发现偶数项按整数递增,而剩下的奇数项又是新的一个这样的一个序列,所以递归一下就ok


// 观察一下前几项#include <cstring>#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <set>using namespace std;set<int>s;const int maxn = 2001;int sg[maxn];int get(){    int i=0;    while(s.count(i))        i++;    return i;}int main(){    sg[1]=0;    for(int i=2;i<maxn;i++)    {        s.clear();        for(int j=1;j*2<=i;j++) // j为从i中拿走不超过一半的            s.insert(sg[i-j]);        sg[i]=get();    }    for(int i=0;i<100;i++)        cout<<i<<" "<<sg[i]<<endl;    return 0;}



// AC 代码#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <cstdio>using namespace std;long long sg(long long n){    if(n&1)        return sg(n/2);    else        return n/2;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n;        long long x;        scanf("%d",&n);        long long ans=0;        while(n--)        {            scanf("%lld",&x);            ans^=sg(x);        }        if(ans)            printf("YES\n");        else            printf("NO\n");    }    return 0;}


原创粉丝点击