题目链接

先打一个sg函数的表,找找规律,发现sg函数可以递归求解

打表代码如下

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

;

bool vis[N];
int sg[N];
int k;

void init()
{
    memset(sg,,sizeof(sg));
    memset(vis,false,sizeof(vis));
    sg[]=,sg[]=;
    ;i<=;i++)
    {
        memset(vis,,sizeof(vis));
        )/k;j<i;j++)
            vis[sg[j]]=true;
        ;j<=;j++)
            if(vis[j]==false)
            {
                sg[i]=j;
                break;
            }
    }
}

int main()
{
    ios::sync_with_stdio(false);
    while(cin>>k)
    {
        init();
        ;i<=;i++)
        {
            printf(? '\n':' ');
        }
        puts("");
        puts("");
    }
}

得到的一个结果

k=
sg[  ]=   sg[  ]=   sg[  ]=   sg[  ]=
sg[  ]=   sg[  ]=   sg[  ]=   sg[  ]=
sg[  ]=   sg[ ]=   sg[ ]=   sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=  sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=  sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=  sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=   sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=  sg[ ]=  sg[ ]=  sg[ ]=
sg[ ]=  sg[ ]=  sg[ ]=  sg[ ]= 

当然k可以改来改去地试

再之后,如果异或和不为0,要特殊处理下,也是根据打表的规律,具体方法见代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

;
LL k;
int n;
LL a[N];

LL sg(LL x)
{
    ||x==) ;
    )
        )/k;
    return sg(x/k);
}

int main()
{
    while(~scanf("%d%lld",&n,&k))
    {
        LL ans=;
        ;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            ans^=sg(a[i]);
        }
//        cout<<ans<<endl;
        if(ans)
        {
            int pos;
            LL y;
            ;i<=n;i++)
            {
                LL sgx=sg(a[i]),t=sgx^ans;
                pos=i;
                y=t+(t+k-)/(k-);
//                cout<<y<<' '<<(a[i]+k-1)/k<<endl;
                )
                {
                    if(y>=a[i]) break;
                    )/k)
                    {
                        printf("Alice %d %lld\n",pos,y);
                        ;
                    }
                    y=y*k+;
                }
            }
            printf("Alice %d %lld\n",pos,y);
        }
        else
            puts("Bob");
    }
}

51nod_1661: 黑板上的游戏(sg函数 找规律)的更多相关文章

  1. BZOJ 1228 E&G(sg函数+找规律)

    把一对石子堆看出一个子游戏.打出子游戏的sg表找规律.. 这个规律我是一定找不出来的... 对于i,j,如果 (i-1)%pow(2,k+1) < pow(2,k) (j-1)%pow(2,k+ ...

  2. 51nod 1661: 黑板上的游戏(sg函数 找规律)

    题目链接 先打一个sg函数的表,找找规律,发现sg函数可以递归求解 打表代码如下 #include<bits/stdc++.h> using namespace std; typedef ...

  3. HDU-4664 Triangulation 博弈,SG函数找规律

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664 题意:一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的 ...

  4. HDU 1517 A Multiplication Game (SG函数找规律)

    题意:两个玩家玩一个游戏,从 p = 1,开始,然后依次轮流选择一个2 - 9的数乘以 p,问你谁先凑够 p >= n. 析:找规律,我先打了一下SG函数的表,然后就找到规律了 我找到的是: 1 ...

  5. 51nod-1661 1661 黑板上的游戏(组合游戏)

    题目链接: 1661 黑板上的游戏 Alice和Bob在黑板上玩一个游戏,黑板上写了n个正整数a1, a2, ..., an,游戏的规则是这样的:1. Alice占有先手主动权.2. 每个人可以选取一 ...

  6. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念:        P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点 ...

  7. 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)

    题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...

  8. HDU 1536 S-Nim (组合游戏+SG函数)

    题意:针对Nim博弈,给定上一个集合,然后下面有 m 个询问,每个询问有 x 堆石子 ,问你每次只能从某一个堆中取出 y 个石子,并且这个 y 必须属于给定的集合,问你先手胜还是负. 析:一个很简单的 ...

  9. BZOJ1188 [HNOI2007]分裂游戏(SG函数)

    传送门 拿到这道题就知道是典型的博弈论,但是却不知道怎么设计它的SG函数.看了解析一类组合游戏这篇论文之后才知道这道题应该怎么做. 这道题需要奇特的模型转换.即把每一个石子当做一堆石子,且原来在第i堆 ...

随机推荐

  1. 提升单元测试体验的利器--Mockito使用总结

    为神马要使用Mockito? 在编写单元测试的时候,为了尽可能的保证隔离性,我们时常需要对某些不容易构造或者不容易获取或者对外部环境有依赖的对象,用一个虚拟的对象来创建以便于测试.假设你正在开发的的代 ...

  2. 磁盘配额quota

    磁盘配额 1 启用磁盘配额 首先创建新的分区 /dev/sd5,并创建文件系统. [root@local ~]# mkfs.ext4 /dev/sda5 由于xfs 不磁盘配额能成功,这里使用ext4 ...

  3. C++函数调用的反汇编过程及Thunk应用

    x86汇编基础知识 1. 汇编常用寄存器 esp,(Extended stack pointer)栈顶指针.因为x86的栈内存是向下扩展的,因此当push入栈时,esp–.pop出栈时,esp++.e ...

  4. Webpack插件开发简要

    背景 如今'大前端'这个概念在前端界大热,说'大前端',我们就要提到'前后端分离','前后端分离'又离不开'本地开发构建','本地开发构建'自然离不开webpack,webpack想要工作,那它就需要 ...

  5. MVC4加载zTree树小控件

    前言: 第一次学习使用MVC框架,找了个练手项目,加载zTree树小控件.下面我就一步步说明我这次练手的经历以记录.如果有什么错误,希望各位大神帮忙指正,谢谢. 第一步: 利用VS2010新建一个MV ...

  6. [0] DDD领域驱动设计(三) 之 聚合(根)、实体、值对象

    1.      聚合根.实体.值对象的区别? 从标识的角度: 聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法: 从是否只读的角度 ...

  7. SpringMVC学习资料

    一.SpringMVC 1.helloworld 1.导包 <dependency> <groupId>org.springframework</groupId> ...

  8. JDBC 数据库连接操作——实习第三天

    今天开始了比较重量级的学习了,之前都是对于Java基础的学习和回顾.继续上篇的话题,<谁动了我的奶酪>,奉献一句我觉得比较有哲理的话:"学会自嘲了,而当人们学会自嘲,能够嘲笑自己 ...

  9. [USACO08NOV]奶牛混合起来Mixed Up Cows

    题目描述 Each of Farmer John's N (4 <= N <= 16) cows has a unique serial number S_i (1 <= S_i & ...

  10. response.sendRedirect页面跳转的方法总结——实习第六天

    今天想到要写这个博客完全是因为今天在这上面摔了一跤,同时也意识到了对于一个学Java的人来讲,知其然并且知其所以然是有多么的重要. 今天报了一个错误,讲的是空指针异常,原因就是在response.se ...