题目描述:

(<--这个)

组合游戏,——把每个石头看做一个游戏,

Multi_game——消去i上的石子后,,k上的游戏又多了一个;

于是就套用multi_game的模型即可

求解SG函数时,发现一个游戏的后继是谁只与其位置有关,于是可以用一个SG值代替一堆游戏的SG值;

求解完所有SG值,后异或即可;

代码:

 #include<cstdio>
#include<cstring>
using namespace std;
int a[],n,sg[],g[];
int SG(int );
int main()
{
int i,j,k,T,ans,tot;
scanf("%d",&T);
while(T--){
ans=;tot=;
memset(sg,-,sizeof(sg));
scanf("%d",&n);
for(i=;i<=n;i++)
scanf("%d",&a[i]);
for(i=;i<=n;i++)
if(a[i]&)
ans^=SG(i);
if(ans==)
printf("-1 -1 -1\n0\n");
else{
for(i=;i<=n;i++)
for(j=i+;j<=n;j++)
for(k=j;k<=n;k++)
if((ans^SG(i)^SG(j)^SG(k))==){
if(!tot)printf("%d %d %d\n",i-,j-,k-);
tot++;
}
if(!tot)printf("-1 -1 -1\n");
printf("%d\n",tot);
}
}
return ;
}
int SG(int x){
int i,j;
if(sg[x]!=-)return sg[x];
if(x==n)return sg[x]=;
memset(g,,sizeof(g));
for(i=x+;i<=n;i++)
for(j=i;j<=n;j++)
g[SG(i)^SG(j)]=;
for(i=;;i++)
if(!g[i])return sg[x]=i;
}

BZOJ P1188 HNOI2007 分裂游戏——solution的更多相关文章

  1. bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)

    1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 733  Solved: 451[Submit][Status ...

  2. bzoj 1188 [HNOI2007]分裂游戏 SG函数 SG定理

    [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1394  Solved: 847[Submit][Status][Dis ...

  3. [BZOJ 1188] [HNOI2007] 分裂游戏 【博弈论|SG函数】

    题目链接:BZOJ - 1188 题目分析 我们把每一颗石子看做一个单个的游戏,它的 SG 值取决于它的位置. 对于一颗在 i 位置的石子,根据游戏规则,它的后继状态就是枚举符合条件的 j, k.然后 ...

  4. BZOJ 1188: [HNOI2007]分裂游戏(multi-nim)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1386  Solved: 840[Submit][Status][Discuss] Descripti ...

  5. BZOJ 1188 [HNOI2007]分裂游戏

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1188 学习SG函数的过程中,我先看了一篇叫做 <2008-贾志豪-组合数学略述... ...

  6. bzoj 1188 : [HNOI2007]分裂游戏 sg函数

    题目链接 给n个位置, 每个位置有一个小球. 现在两个人进行操作, 每次操作可以选择一个位置i, 拿走一个小球.然后在位置j, k(i<j<=k)处放置一个小球. 问你先进行什么操作会先手 ...

  7. bzoj1188 [HNOI2007]分裂游戏 博弈论 sg函数的应用

    1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 973  Solved: 599[Submit][Status ...

  8. [bzoj1188][HNOI2007]分裂游戏_博弈论

    分裂游戏 bzoj-1188 HNOI-2007 题目大意:题目链接. 注释:略. 想法: 我们发现如果一个瓶子内的小球个数是奇数才是有效的. 所以我们就可以将问题变成了一个瓶子里最多只有一个球球. ...

  9. 【BZOJ 1188】 [HNOI2007]分裂游戏

    Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子 ...

随机推荐

  1. declare命令

    还是围绕以下几个问题进行学习; 1.declare是什么? 2.问什么要用declare? 3.怎样使用declare? 1.declare是什么? ♦declare应用的很多,向我们各种语言都会有声 ...

  2. Ionic2使用TypeScript调用自定义JavaScript脚本

    在项目app目录下面写一个.d.ts 里面声明你要引用JS库里面定义的变量,变量名要保持一致 declare var Strophe: any; 然后把JS库放在www目录下面 然后在index.ht ...

  3. javascript如何阻止事件冒泡和默认行为

    阻止冒泡:    冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而以引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷.下面的demo ...

  4. Java代码度量分析工具:Designite简介

    前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.此类的度量工具有许多,或以插件形式存在于各个IDE中,或以.jar包的形式供用户使用.在这里,笔者向大家简单的介 ...

  5. geatpy - 遗传和进化算法相关算子的库函数(python)

    Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...

  6. 思科设备配置DHCP服务

    路由器,三层交换机都是可以做DHCP服务的,下面以Cisco 3750G-24TS-S为例配置DHCP服务,指令如下: ip dhcp pool DHCP-Server network 192.168 ...

  7. excel 正则表达式用法

    Private Sub RegEx_Replace()        Dim myRegExp As Object      Dim Myrange As Range, C As Range      ...

  8. C# .net 使用正则表达式去掉字符串中的数字

    /// <summary>/// 去掉字符串中的数字/// </summary>/// <param name="key"></param ...

  9. Linux下C++开发常用命令

    本页面记录本人在Linux下进行C++开发时使用的常用命令,注意这里不包括比如ls,mv等linux命令,这里会持续更新.首先假设你只有一个源程序文件,叫vec.cpp,编译后的可执行程序叫vec(本 ...

  10. java调用svnkit工具类上传本地文件到svn服务器

    package org.jenkinsci.plugins.svn.upload.step; import java.io.*; import org.tmatesoft.svn.core.SVNCo ...