题目大意:

给出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. 亚马逊VPS

    添加用户: 第一步 注册亚马逊云(已注册直接进入第二步)1.开始前需要准备好:有外币支付功能的信用卡一张(注册需要,不扣钱).Email地址.电话(手机更方便一些)2.访问 https://amazo ...

  2. linux命令之磁盘和文件系统操作

    1.   fdisk:磁盘分区命令 语法:fdisk [选项][参数] 命令说明:fdisk是linux系统里常用的一种磁盘管理工具,可以创建和管理系统分区 常用命令选项: -l:列出指定的并退出,没 ...

  3. struts2的token interceptor

    关于struts2的token拦截器的说明 原理:struts2的token interceptor是关于重复提交的拦截器,其实现是:在form表单中加入token标签,如下: <form ac ...

  4. 初次了解MVC框架模式

    MVC框架:即Model.View.Controller即模型.视图.控制器. View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将显示界面和业务逻辑合 ...

  5. django开发傻瓜教程-3-celery异步处理

    Ref: https://www.jianshu.com/p/6f8576a37a3e https://blog.csdn.net/Demo_3/article/details/78119951 ht ...

  6. 毕业2年 Summary

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/135 看了下去年写毕业一周年总结的时间:2017-6-16,今天 ...

  7. 数据库 MySQL part2

    表记录的操作 增 1.插入一条记录 语法:insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......); ...

  8. android 怎么判断activity 从哪里启动的

    有时候,你想要知道,有一个activity 从哪里启动的.怎么才能知道呢? 1.前提是,androidstadio 你下载了源码.找到你的activityBase的实现类,在startActivity ...

  9. C++基础语言知识大汇总(不断更新!!!)

    经过十天的时间,LITTLESUN做好了前期的工作,今天LITTLESUN就要在新地图里扬帆起航喽!!!(撒花) 简单的整理了一下这次启航准备好的物资.后面的航程中也会不断来补充这个小仓库哦!

  10. L009文件属性知识详解小节

    本堂课分为5部分内容 1.linux下重要目录详解 2.PATH变量路径内容 3.linux系统中文件类型介绍 4.linux系统中文件属性详细介绍 5.linux系统文件属性inode与block知 ...