【博弈论】【SG函数】【枚举】bzoj1188 [HNOI2007]分裂游戏

时间:2021-05-21 02:56:59

因为第i个瓶子里的所有豆子都是等价的,设sg(i)表示第i个瓶子的sg值,可以转移到sg(j)^sg(k)(i<j<n,j<=k<n)的状态。

只需要考虑豆子数是奇数的瓶子啦,因为如果豆子数是偶数,重复异或是没有意义的。

对于方案数什么的……枚举就好了。

#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
int T,n,a[21],SG[21];
int sg(int x)
{
if(SG[x]!=-1) return SG[x];
set<int>S;
for(int i=x+1;i<n;++i)
for(int j=i;j<n;++j)
S.insert(sg(i)^sg(j));
for(int i=0;;++i)
if(S.find(i)==S.end())
return SG[x]=i;
}
int main()
{
scanf("%d",&T);
for(;T;--T)
{
memset(SG,-1,sizeof(SG));
int ans=0,sum=0;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
if(a[i]&1) ans^=sg(i);
}
if(ans)
{
for(int i=0;i<n;++i) if(a[i])
for(int j=i+1;j<n;++j)
for(int k=j;k<n;++k)
{
--a[i];
++a[j];
++a[k];
int t=0;
for(int l=0;l<n;++l)
if(a[l]&1)
t^=sg(l);
if(!t)
{
++sum;
if(sum==1)
printf("%d %d %d\n",i,j,k);
}
++a[i];
--a[j];
--a[k];
}
printf("%d\n",sum);
}
else printf("-1 -1 -1\n0\n");
}
return 0;
}

【博弈论】【SG函数】【枚举】bzoj1188 [HNOI2007]分裂游戏的更多相关文章

  1. bzoj1188 &lbrack;HNOI2007&rsqb;分裂游戏 博弈论 sg函数的应用

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

  2. BZOJ1188 &lbrack;HNOI2007&rsqb;分裂游戏&lpar;SG函数&rpar;

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

  3. &lbrack;bzoj1188&rsqb;&lbrack;HNOI2007&rsqb;分裂游戏&lowbar;博弈论

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

  4. BZOJ1188&colon;&lbrack;HNOI2007&rsqb;分裂游戏&lpar;博弈论&rpar;

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

  5. &lbrack;BZOJ1188&rsqb;&lbrack;HNOI2007&rsqb;分裂游戏(博弈论)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1188 分析: 设SG[i]表示一个石子在位置i上的SG值 这个很容易暴力求,因为i的后 ...

  6. bzoj1188&colon; &lbrack;HNOI2007&rsqb;分裂游戏

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

  7. POJ3710 Christmas Game 博弈论 sg函数 树的删边游戏

    http://poj.org/problem?id=3710 叶子节点的 SG 值为0:中间节点的SG值为它的所有子节点的SG值加1后的异或和. 偶环可以视作一个点,奇环视为一条边(连了两个点). 这 ...

  8. bzoj 1188 &lbrack;HNOI2007&rsqb;分裂游戏(SG函数,博弈)

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

  9. bzoj 1188 &lbrack;HNOI2007&rsqb;分裂游戏 SG函数 SG定理

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

随机推荐

  1. Linux下用ftp更新web内容!

    使用ftp更新web!让网页更新一次OK! 配置如下: 1.在Linux下安装ftp服务器! yum -y install vsftpd #ftp由vsftpd提供! 2.配置主配置文件/etc/vs ...

  2. RTL-SDR &plus; GnuRadio&plus;RFcat 分析、重放无线遥控信号

    0×00 前言 前段时间在<永不消逝的电波(二)HackRF入门:家用无线门铃信号重放> 一文中通过HackRF录制.重放了无线遥控信号,不过一直没来得及对信号进行分析,刚好在国外网站看到 ...

  3. 第二节:模型(Models)和管理后台(Admin site)

    本节内容我们将配置数据库,创建第一个model并且快速了解Django自动生成的管理后台(admin site) 目录 数据库配置 创建模型 激活模型 使用Django API 介绍Django管理后 ...

  4. 《2016ThoughtWorks技术雷达峰会----雷达新趋势》

    雷达新趋势    徐昊,ThoughtWorks中国区CTO 1.Open Source  open source 已经从一个简简单单的软件代码组织方式变成一种文化,一种运动.当谈到Open Sour ...

  5. Android支付接入(二):移动游戏基地

    原地址:http://blog.csdn.net/simdanfeg/article/details/9011863 上篇博文跟大家一起走了一遍支付宝支付,今天我们来看看移动支付.众所周知目前付费通道 ...

  6. POJ 3449 Geometric Shapes &lpar;求正方形的另外两点&rpar;

    Geometric Shapes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1470   Accepted: 622 D ...

  7. linux内核数据结构之链表

    linux内核数据结构之链表 1.前言 最近写代码需用到链表结构,正好公共库有关于链表的.第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域.后来看代码注释发现该 ...

  8. linux编译内核

    ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决   首先,在make menuconfig的时候就会提示没有 nucrs ...

  9. Spring核心简介

    Spring简介 Spring是一个开源.轻量级框架.在诞生之初,创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB(Enterprise JavaBean).从最初的挑 ...

  10. UVa 11077 Find the Permutations &lpar;计数DP&rpar;

    题意:给定 n 和 m,问你在 1 ~ n 的所有排列中,有多少个排列满足至少要交换 m 次才能变成 1 2 3 ... n. 析:首先,先考虑一下,某个排列,要变成 1 2 3 .. n,最少要交换 ...