【博弈论】【SG函数】【枚举】bzoj1188 [HNOI2007]分裂游戏
因为第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]分裂游戏的更多相关文章
- bzoj1188 [HNOI2007]分裂游戏 博弈论 sg函数的应用
1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 973 Solved: 599[Submit][Status ...
- BZOJ1188 [HNOI2007]分裂游戏(SG函数)
传送门 拿到这道题就知道是典型的博弈论,但是却不知道怎么设计它的SG函数.看了解析一类组合游戏这篇论文之后才知道这道题应该怎么做. 这道题需要奇特的模型转换.即把每一个石子当做一堆石子,且原来在第i堆 ...
- [bzoj1188][HNOI2007]分裂游戏_博弈论
分裂游戏 bzoj-1188 HNOI-2007 题目大意:题目链接. 注释:略. 想法: 我们发现如果一个瓶子内的小球个数是奇数才是有效的. 所以我们就可以将问题变成了一个瓶子里最多只有一个球球. ...
- BZOJ1188:[HNOI2007]分裂游戏(博弈论)
Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏.该游戏的规则试:共有n个瓶子,标号为0,1,2.....n-1,第i个瓶子中装有p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择3个 ...
- [BZOJ1188][HNOI2007]分裂游戏(博弈论)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1188 分析: 设SG[i]表示一个石子在位置i上的SG值 这个很容易暴力求,因为i的后 ...
- bzoj1188: [HNOI2007]分裂游戏
Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子 ...
- POJ3710 Christmas Game 博弈论 sg函数 树的删边游戏
http://poj.org/problem?id=3710 叶子节点的 SG 值为0:中间节点的SG值为它的所有子节点的SG值加1后的异或和. 偶环可以视作一个点,奇环视为一条边(连了两个点). 这 ...
- bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)
1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 733 Solved: 451[Submit][Status ...
- bzoj 1188 [HNOI2007]分裂游戏 SG函数 SG定理
[HNOI2007]分裂游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1394 Solved: 847[Submit][Status][Dis ...
随机推荐
- C语言一些常用的功能
1.测试运行时间: #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { clock ...
- 使用apache构建OpenStack内部yum源
安装apache yum install httpd -y 上传openstack-mitaka-rpms.tar包,链接:http://pan.baidu.com/s/1kVA1wKv 密码:q26 ...
- codechef T2 Chef and Sign Sequences
CHEFSIGN: 大厨与符号序列题目描述 大厨昨天捡到了一个奇怪的字符串 s,这是一个仅包含‘<’.‘=’和‘>’三种比较符号的字符串. 记字符串长度为 N,大厨想要在字符串的开头.结尾 ...
- [POJ1286&POJ2154&POJ2409]Polya定理
Polya定理 L=1/|G|*(m^c(p1)+m^c(p2)+...+m^c(pk)) G为置换群大小 m为颜色数量 c(pi)表示第i个置换的循环节数 如置换(123)(45)(6)其循环节数为 ...
- [vue-router] Failed to resolve async component default: Error: Loading chunk 0 failed.
在整合laravel5.4 和vue2.1的时候遇到一个奇怪的问题 Uncaught SyntaxError: Unexpected token < Error: Loading chunk 0 ...
- PL/SQL 09 包 package
--定义包头 create or replace package 包名as 变量.常量声明; 函数声明; 过程声明;end; --定义包体 create or replace package b ...
- Spring --- 异常处理机制
1.定义全局异常处理器,为全局的异常,如出现将调用 error.JSP <!-- 定义异常处理器 --> <bean class="org.springframework. ...
- tarjan算法和Kosaraju算法
tarjan算法和Kosaraju算法是求有向图的强连通分量的算法: #include<iostream> #include<cstring> using namespace ...
- 【SQL】单个表的查询
看到一本好书:名字叫做<数据库系统基础教程> 第三版 岳丽华等译 讲得很清楚,也不啰嗦. 这里是书中第六章的部分笔记: 一.常见用法: 1. AS 定义别名 可省略 2. 可以用加减乘除 ...
- MATLAB求解方程与方程组
1. solve函数 ①求解单个一元方程的数值解 syms x; x0 = double(solve(x +2 - exp(x),x)); 求x+2 = exp(x)的解,结果用double ...