题目大意:

给出n+1堆石子,前n堆石子的数量是a[i],最后一堆只有1个石子,但是具有魔力

拿走该石子的一方可以选择接下来是进行普通的Nim游戏还是anti-nim游戏

问是先手必胜还是必败

首先拿全是1的情况熟悉一下规则

如果全是1,那么无论有几堆,先手都是必胜的

因为如果有奇数个1,那么Alice直接拿掉魔力石子,然后选择不改变游戏,那么他还是赢的

如果有偶数个1,那么Alice直接拿掉魔力式子,然后选择改变游戏,于是他还是赢的。

然后回忆一下anti-nim的先手必胜条件(这里的SG不考虑多魔法石子的那一堆)

SG为0,且所有石子均为1

SG不为0,且存在一堆石子大于1

所以,如果不全是1,且SG为0的话,Alice是必输的,因为他取魔力石子后,仍然无法改变必输的情况

所以现在情况只有不全是1,且SG不为0

注意到这个时候任何一方如果直接取魔力石子,都是必败的

所以双方应该会保持SG不为0,然后进行对峙

首先考虑所以石子的数量不超过3

那么SG函数的值就只有3个,1,2,3

当SG为1或3的时候,肯定有一种取法使得SG为2

而SG为2的最终情况是2附加一个魔力石子,这种情况是必败的

所以当石子的数量不超过3时,SG=2先手必败,反之必胜

接下来考虑石子的数量超过3,也就是有4和4以上的数

那么SG函数的值可以分成1和超过1的那些情况

如果当前SG值为1,那么只能把它变成超过1的值,然而对手又可以把它变回到1

我们考虑假设只有1个超过3的数,那么这时候SG值肯定是大于3的

直接改变这个数,我们可以使得接下来的局面变成SG=2

也就是说,如果只有1个超过3的数,那么就是先手必胜

那么如果SG值为1,且我们知道存在超过3的数,那么超过3的数的数量必定至少有2个

也就是说,经过不断地对峙,原来SG值为1的话,现在SG值仍然为1

但是经过了很多减少,一定会达到这个局面

即SG值为1,且超过3的数量只有2个

当这2个其中的一个数减到4以下时,就变成了只有1个超过3的数

即SG->1->3以上->2(最终结果)

也就是说SG如果为1,必定会转化成2,那么SG=1就是必败局面,而其他情况是必胜局面

最后结论就是

如果有大于3的数,那么SG=1必败

如果没有,那么SG=2必败

(PS:题解的思路没有太明白,不知道是怎么想到右移1位然后分类的,然后莫名分类就分出来了orz)

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <typeinfo>
#include <fstream> using namespace std; class MagicNim {
public:
string findWinner(vector<int> a) {
sort(a.begin(), a.end());
int n = a.size(), sg = ;
for(int i = ; i < n; i++) sg ^= a[i];
if(a[n-] >= ) return (sg == ? "Bob" : "Alice");
else return (sg == ? "Bob" : "Alice");
}
};

SRM710 div1 MagicNim(博弈论)的更多相关文章

  1. SRM710 div1 ReverseMancala(trick)

    题目大意, 给定一个有n个点的环,n不超过10,每个点上有一个权重 起始时权重将会给出,然后有2种操作 第一种操作是,选择一个位置i,获得权重w = a[i],把a[i]变成0,然后接下来在环上顺着走 ...

  2. IT人生知识分享:博弈论的理性思维

    背景: 昨天看了<最强大脑>,由于节目比较有争议性,不知为什么,作为一名感性的人,就想试一下如果自己理性分析会是怎样的呢? 过程是这样的: 中国队(3人)VS英国队(4人). 1:李建东( ...

  3. [poj2348]Euclid's Game(博弈论+gcd)

    Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9033   Accepted: 3695 Des ...

  4. 博弈论揭示了深度学习的未来(译自:Game Theory Reveals the Future of Deep Learning)

    Game Theory Reveals the Future of Deep Learning Carlos E. Perez Deep Learning Patterns, Methodology ...

  5. TYVJ博弈论

    一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140  飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...

  6. Codeforces 549C. The Game Of Parity[博弈论]

    C. The Game Of Parity time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. CF#345 (Div1)

    论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...

  8. 图论 SRM 674 Div1 VampireTree 250

    Problem Statement      You are a genealogist specializing in family trees of vampires. Vampire famil ...

  9. jq对象转为dom对象:$(".div1")[0] dom对象转为jq对象:$(dom对象)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

随机推荐

  1. Linux系统运维基础测试题

    1    Linux运维基础测试题(第一关) 通过这段时间学习Linux基础命令,为了检测自己对Linux基础命令掌握的情况,从网上整理13到测试题,并将其整理出来供大家参考学习. 1.1    习题 ...

  2. CentOS 7.4使用yum源安装php7.2

    1.如果之前已经安装我们先卸载一下 yum -y remove php* 2.由于linux的yum源不存在php7.x,所以我们要更改yum源 rpm -Uvh https://dl.fedorap ...

  3. thinkphp发送邮箱(以thinkphp5作为示例)。

    第一步:设置我们的邮箱客户端授权码 第二步:下载相应的第三方类库(我这里用的PHPemail) 这是phpemailde 第三方类库的文件下载地址:https://github.com/PHPMail ...

  4. symfony 安装使用(一)

    Symfony安装教程网上已经存在很多了,但是这里还是要写一下: 1.symfony 安装有以下几种,对应不同的环境 1.1通过composer 命令安装 composer create-projec ...

  5. c语言中 *p++ 和 (*p)++ 和 *(p++) 和 *(++p) 和++(*p)和 *(p--)和 *(--p)有什么区别?

    *p++是指下一个地址; (*p)++是指将*p所指的数据的值加一; /******************解释**********************/ ->C编译器认为*和++是同优先级 ...

  6. Linux篇:因为修改了/etc/sudoers 文件的权限导致的问题

    因为想要把sudo变成免密码所以就查了网上的教程.说是要修改/etc/sudoers文件,但是修改的时候发现这个文件是只读, 所以就 /etc/sudoers 结果就导致了接下来用sudo的时候提示如 ...

  7. sqlserver 数据查询效率优化

    首先优化是具体情况具体分析,从硬件.改进表结构.索引.改进sql查询语句.存储方式都有关系等多方面入手 比如单表数据量(100w-200w条)不大的情况下,查询效率慢 可以从优化sql语句.对多个排序 ...

  8. 【C#】 URL Protocol

    [C#] URL Protocol 网页调用本地程序, 支持 Windows 下所有浏览器, 与浏览器插件对比实现简单,但判断是否调用成功时, 只有ie10以上有函数,其他浏览器得自己实现(用 ifr ...

  9. 玩转Vim-札记(二)

    玩转Vim-札记(二) 距上篇博文已有一周有余,上次主要介绍了编辑器之神Vim的起源.安装并介绍了两种模式以及一些简单的操作.本次将继续对Vim的使用进行介绍. 登堂入室 首先接着说移动吧: 0 → ...

  10. 【APUE】Chapter13 Daemon Processes

    这章节内容比较紧凑,主要有5部分: 1. 守护进程的特点 2. 守护进程的构造步骤及原理. 3. 守护进程示例:系统日志守护进程服务syslogd的相关函数. 4. Singe-Instance 守护 ...