BZOJ P1188 HNOI2007 分裂游戏——solution
题目描述:
(<--这个)
组合游戏,——把每个石头看做一个游戏,
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的更多相关文章
- 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 ...
- [BZOJ 1188] [HNOI2007] 分裂游戏 【博弈论|SG函数】
题目链接:BZOJ - 1188 题目分析 我们把每一颗石子看做一个单个的游戏,它的 SG 值取决于它的位置. 对于一颗在 i 位置的石子,根据游戏规则,它的后继状态就是枚举符合条件的 j, k.然后 ...
- BZOJ 1188: [HNOI2007]分裂游戏(multi-nim)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1386 Solved: 840[Submit][Status][Discuss] Descripti ...
- BZOJ 1188 [HNOI2007]分裂游戏
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1188 学习SG函数的过程中,我先看了一篇叫做 <2008-贾志豪-组合数学略述... ...
- bzoj 1188 : [HNOI2007]分裂游戏 sg函数
题目链接 给n个位置, 每个位置有一个小球. 现在两个人进行操作, 每次操作可以选择一个位置i, 拿走一个小球.然后在位置j, k(i<j<=k)处放置一个小球. 问你先进行什么操作会先手 ...
- bzoj1188 [HNOI2007]分裂游戏 博弈论 sg函数的应用
1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 973 Solved: 599[Submit][Status ...
- [bzoj1188][HNOI2007]分裂游戏_博弈论
分裂游戏 bzoj-1188 HNOI-2007 题目大意:题目链接. 注释:略. 想法: 我们发现如果一个瓶子内的小球个数是奇数才是有效的. 所以我们就可以将问题变成了一个瓶子里最多只有一个球球. ...
- 【BZOJ 1188】 [HNOI2007]分裂游戏
Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子 ...
随机推荐
- VS中工程的“依赖”,“库目录”,“包含目录”
写多了Vs中的工程,就会遇到很多环境配置问题,例如“依赖项”,“库目录”,“包含目录”等等等等. 今天要记录的就是这些的基本含义:我们拿一个例子来看,更加清晰易懂一些: 例如在Opencv3.0+VS ...
- leetcode-479-Largest Palindrome Product(找到两个乘数相乘得到的最大的回文数)
题目描述: Find the largest palindrome made from the product of two n-digit numbers. Since the result cou ...
- 架构师养成记--35.redis集群搭建
前记:redis哨兵经验之谈.哨兵做主从切换可能要花费一两秒,这一两秒可能会丢失很多数据.解决方法之一是在java代码中做控制,try catch 到 链接断开的异常就sleep 一两秒钟再conti ...
- elment 中 el-table 进行校验
脑洞大开:什么是展示数据最好的方式呢,表格,写得又快,又清晰,又明显,那么就积累一些工作中表格经常使用到的东西. 第一步:效果图: 第二步:举个例子: <template> <div ...
- Flask中的before_request装饰器和after_request装饰器以及WTForms组件
一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...
- Ubuntu+Mac使用飞鸽传书iptux进行互通
iptux不能直接与Mac版的IPMessage进行文件传输,但是可以和Windows的IPMessage进行互通.如果要实现Ubuntu和Mac下互通,就必须编译同一套代码,因为使用C++写的,所以 ...
- 对 BOIS 的一些介绍
BIOS里不可调节CPU将在64/32位系统下工作 知识点延伸1,一般CPU要想在64位状态下运行必须具备两个条件: 1)安装64位操作系统 2)CPU本身就支持64位指令集 知识点延伸2有必要了解B ...
- 通过面试题,让我们来了解Collection
前言 欢迎关注公众号:Coder编程 获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!** 本章主要介绍Collection集合相关知识,结合面试中会提到的相关问题进行知识点的梳理.希望 ...
- InterView之C/CPP
CPP 引用 什么是"引用"?申明和使用"引用"要注意哪些问题? 答:引用就是某个目标变量的别名(alias),对应用的操作与对变量直接操作效果完全相同.申明一 ...
- TCP网络参数优化
TCP连接的状态 TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态,表示没有任何连接. LISTEN:Server端的某 ...