将一堆石子分成多堆——Multi-SG 游戏
这类博弈只需要记住一点,一个由多个游戏组成的游戏sg值为这多个游戏的sg值异或和。
也就是所有对一整个nim游戏它的sg值即为每一小堆的sg的异或和。
这题就是可以选择把一堆石子分成3堆。 通过上述方法,只需要打表找出规律即可。
#include<stdio.h>
#include<string.h>
#include <iostream>
using namespace std; int sg[];
void init()//sg打表
{
// memset(sg,0,sizeof(sg));
sg[]=;
sg[]=;
for(int i=;i<=;i++)
{
bool vis[]={false}; for(int j=;j<=i;j++)
{
vis[sg[j]]=true;//取石子
}
for(int j=;j<i;j++)
for(int k=;k<i;k++)
{
for(int p=;p<i;p++)
{ if(j+k+p==i) vis[sg[j]^sg[k]^sg[p]]=true;//拆分
}
} int j=;
while(vis[j]!=)j++;
sg[i]=j;
}
} int main()
{
// memset(sg,-1,sizeof(sg));
// init();
// for(int i=1;i<=100;i++)
// {
// printf("%d\t",sg[i]);
// if(i%8==0)printf("\n");
// }
//
int T;
cin>>T;
while(T--)
{
int n;
scanf("%d",&n);
int ans = ;
for(int i=;i<n;i++)
{
int tmp;
scanf("%d",&tmp);
if(tmp%==)
{
ans ^= (tmp-);
}
else if(tmp%==) ans ^= (tmp+);
else ans ^= tmp;
}
if(ans == ) cout<<"Second player wins."<<endl;
else cout<<"First player wins."<<endl;
}
}
将一堆石子分成多堆——Multi-SG 游戏的更多相关文章
- hdu5795 A Simple Nim 求nim求法,打表找sg值规律 给定n堆石子,每堆有若干石子,两个人轮流操作,每次操作可以选择任意一堆取走任意个石子(不可以为空) 或者选择一堆,把它分成三堆,每堆不为空。求先手必胜,还是后手必胜。
/** 题目:A Simple Nim 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5795 题意:给定n堆石子,每堆有若干石子,两个人轮流操作,每次操作 ...
- 第1章 游戏之乐——NIM(3)两堆石头的游戏
NIM(3)两堆石头的游戏 1. 问题描述 假设有两堆石头,有两个玩家会根据如下的规则轮流取石头:每人每次可以从两堆石头中各取出数量相等的石头,或者仅从一堆石头中取出任意数量的石头:最后把剩下的石头一 ...
- sg函数的变形 - 可以将一堆石子分开
Nim is a two-player mathematic game of strategy in which players take turns removing objects from di ...
- UVA 562 Dividing coins【01背包 / 有一堆各种面值的硬币,将所有硬币分成两堆,使得两堆的总值之差尽可能小】
It's commonly known that the Dutch have invented copper-wire. Two Dutch men were fighting over a nic ...
- hdu 5088 高斯消元n堆石子取k堆石子使剩余异或值为0
http://acm.hdu.edu.cn/showproblem.php?pid=5088 求能否去掉几堆石子使得nim游戏胜利 我们可以把题目转化成求n堆石子中的k堆石子数异或为0的情况数.使用x ...
- HDU 3032 Nim or not Nim (sg函数)
加强版的NIM游戏,多了一个操作,可以将一堆石子分成两堆非空的. 数据范围太大,打出sg表后找规律. # include <cstdio> # include <cstring> ...
- hdu 3032(博弈sg函数)
题意:与原来基本的尼姆博弈不同的是,可以将一堆石子分成两堆石子也算一步操作,其它的都是一样的. 分析:由于石子的堆数和每一堆石子的数量都很大,所以肯定不能用搜索去求sg函数,现在我们只能通过找规律的办 ...
- Nim 博弈和 sg 函数
sg 函数 参考 通俗易懂 论文 几类经典的博弈问题 阶梯博弈: 只考虑奇数号楼梯Nim,若偶数楼梯只作容器,那么游戏变为Nim.题目 翻转硬币: 局面的SG值为局面中每个正面朝上的棋子单一存在时的S ...
- sg函数的应用
刚刚接触到sg函数突然感觉到原来可以这么好用,sg函数应该算是博弈论中比较经典的东西了.下面来说说sg函数: 从网上搜集资料终于能看懂了下面解释来自http://www.cnblogs.com/cj6 ...
随机推荐
- SQL Server 索引和表体系结构(三)
转自:http://www.cnblogs.com/chenmh/p/3785285.html 包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引 ...
- Mac OS下应用Python+Selenium实现web自动化测试
在Mac环境下的自动化测试环境搭建这里有一篇亲测通过的文<mac下怎么搭建selenium python环境?>. 不过在这个过程中要注意两点: 1.在终端联网执行命令“sudo pip ...
- CF 113C
求区间 [l,r] 满足 素数 = a^2+b^2 a b为任意整数 打素数表,如何证明 此时的素数满足 %4==1 #include<iostream> #include&l ...
- JavaScript的学习
学习了一段时间了,oop 的JavaScript .但是理解了还不是很深入,所以,决定.通过写博客的方式来,加深JavaScript的程度.2016的目标: 第一阶段:oop的JavaScript 第 ...
- PHP中的XML解析的5种方法
[前言]不管是桌面软件开发,还是WEB应用,XML无处不在!然而在平时的工作中,仅仅是使用一些已经封装好的类对XML对于处理,包括生成,解析等.假期有空,于是将PHP中的几种XML解析方法总结如下: ...
- EF 增删改查
StudentEntities entities = new StudentEntities(); //初始化对象 Register register = new Register(); #regio ...
- 【MySQL】MySQL的Sequence
Oracle的Sequence用爽了,发现MySQL没有Sequence,那么,自己写一个呗. > 最简单的实现 先建一个表存储当前值: CREATE TABLE `t_sequence` ( ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- Python3基础 逻辑与 and
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- SqlSever基础 intersect 交集 两个查询结果共有的
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...