传送门
思路:
考场爆零系列
因为当时博弈pi都不会,连SG函数是啥都不知道

现在会了一点点博弈,来看一下
很快写出了10分(n<=16)做法……
orz Va爷的题解
感觉Va爷的博客思路讲的不是很清楚,昨天晚上想了很久,感觉有一个比较合适的解释
我们发现初始状态是可以分解成若干只有一个是反面朝上,即ai=1a_i=1的状态
举例来说,对于样例
10010000100010111 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1
这个状态的子状态就是11,00010001,000000001000000001,00000000000010000000000001,00000000000010000000000001,000000000000001000000000000001和00000000000000010000000000000001
类似分治子问题的思想
也就是说,如果我们当前从左向右扫到第i枚硬币为1(反面朝上),那么前面1~i-1的硬币都是0(正面朝上)
显然对[1,i]的硬币进行操作是对>i的硬币没有影响的
那我们把问题变成求”[1,i]区间中a[i]=1,其余为0”状态下的SG函数,状态表示为sg[i]sg[i]
做完这个子状态后再继续往后扫,扫到j
我们就可以看成前面那个i的子状态已经解决了,那么状态肯定是”[1,j]区间中a[j]=1,其余为0”
这和上面是同一个问题
初始状态的SG函数就是这些子状态的异或和
那怎么求这些子状态的SG函数?
按照题目给出的规则暴力枚举p,q就可以了
比如说我们正在处理状态xx
枚举某一后继状态x′ix'_i,其中x′ix'_i中要翻过来的硬币是x1,x2,x3,..xnx_1,x_2,x_3,..x_n
(显然这些硬币都是≤x≤x的)
我们可以把这个状态表示为x′ix'_i={x1,x2,x3,..xnx_1,x_2,x_3,..x_n}
那么这又是最上面我们所说的拆分子状态了
即x′ix'_i={x1x_1}∪{x2x_2}∪{x3x_3}∪..∪{xnx_n}
sg[x′i]sg[x'_i]=sg[x1]sg[x_1] xor sg[x2]sg[x_2] xor .. xor sg[xn]sg[x_n]
枚举出x的所有后继状态,求出mex(最小未出现自然数)就是sg[x]啦
这里给出一个结论(仅面向初学者)

一个状态的SG=它的所有后继状态的SG的mex=它的所有子状态的SG的异或和

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n,maxn;
int sg[21][30005],a[30005];
bool b[55];
void dp(int y)
{if (sg[maxn][y]!=-1) return;memset(b,0,sizeof(b));int ta=0,tb=0,tc=y,tt,ty;for (;tc%2==0;tc/=2) ++ta;for (;tc%3==0;tc/=3) ++tb;for (int q=1;q<=maxn;++q)for (int p=1;p*q<=ta;++p){tt=y;ty=-1;for (int j=0;j<=q;++j){if (tt==y) ty=0;else ty=(ty==-1?sg[maxn][tt]:ty^sg[maxn][tt]);for (int k=1;k<=p;++k) tt/=2;}if (ty!=-1) b[ty]=1;}for (int q=1;q<=maxn;++q)for (int p=1;p*q<=tb;++p){tt=y;ty=-1;for (int j=0;j<=q;++j){if (tt==y) ty=0;else ty=(ty==-1?sg[maxn][tt]:ty^sg[maxn][tt]);for (int k=1;k<=p;++k) tt/=3;}if (ty!=-1) b[ty]=1;}for (int i=0;i<55;++i)if (!b[i]) return void(sg[maxn][y]=i);
}
main()
{memset(sg,-1,sizeof(sg));for (scanf("%d",&T);T;--T){       scanf("%d%d",&n,&maxn);int ans=0;for (int i=1;i<=n;++i) dp(i);for (int i=1;i<=n;++i){scanf("%d",a+i);if (!a[i]) ans^=sg[maxn][i];}if (ans) puts("win");else puts("lose");}
}

【BZOJ4600】硬币游戏,博弈相关推荐

  1. 浅谈 翻硬币游戏【Nim博弈】

    ACM博客_kuangbin 博弈-翻硬币游戏 hihoCoder 1172 : 博弈游戏·Nim游戏·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和B ...

  2. JZOJ 1322. 硬币游戏

    Description FJ的奶牛喜欢玩硬币游戏,所以FJ发明了一个新的硬币游戏.一开始有N(5<=N<=2,000)个硬币堆成一叠,从上往下数第i个硬币有一个整数值C_i(1<=C ...

  3. JZOJ 1322 硬币游戏

    题目大意: FJ的奶牛喜欢玩硬币游戏,所以FJ发明了一个新的硬币游戏.一开始有N(5<=N<=2,000)个硬币堆成一叠,从上往下数第i个硬币有一个整数值C_i(1<=C_i< ...

  4. JZOJ1322. 硬币游戏

    Description FJ的奶牛喜欢玩硬币游戏,所以FJ发明了一个新的硬币游戏.一开始有N(5<=N<=2,000)个硬币堆成一叠,从上往下数第i个硬币有一个整数值C_i(1<=C ...

  5. 2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进

    作业目的 Python 程序阅读理解 学习Python 编码风格指南中译版(Google SOC), 改进Python程序 如何设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币) ...

  6. 51nod 1381 硬币游戏 概率

    1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有一个简单但是很有趣的游戏.在这个游戏中有一个硬币还有一张桌子,这张桌子上有很多平 ...

  7. [Sdoi2017]硬币游戏 [高斯消元 KMP]

    [Sdoi2017]硬币游戏 题意:硬币序列,H T等概率出现,\(n \le 300\)个人猜了一个长为$ m \le 300$的字符串,出现即获胜游戏结束.求每个人获胜概率 考场用了[1444: ...

  8. 软工作业2:硬币游戏——代码的分析与改进

    目的: Python 程序阅读理解 学习Python 编码风格指南中译版(Google SOC), 改进Python程序 如何设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币), ...

  9. 【BZOJ4820】[SDOI2017]硬币游戏(高斯消元)

    [BZOJ4820][SDOI2017]硬币游戏(高斯消元) 题面 BZOJ 洛谷 题解 第一眼的感觉就是构\(AC\)自动机之后直接高斯消元算概率,这样子似乎就是\(BZOJ1444\)了.然而点数 ...

  10. BZOJ 1411Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】

    1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 897  Solved: 394 [Submit][Stat ...

最新文章

  1. “小霸王学习机”再现?树莓派400正式发布,售价70美元
  2. Fedora安装Texlive2013时出现Can't locate Digest/MD5.pm的解决方法
  3. Swift--基本数据类型(二)
  4. C++:vector中的resize()函数 VS reserve()函数
  5. c语言指针怎样代替二维数组,c语言 指针和二维数组
  6. 头条终面:写个消息中间件
  7. win7 64位 VS2010调试提示“ORA-12154: TNS: 无法解析指定的连接标识符”的解决方法
  8. python中的递归函数是什么_Python中的递归函数是什么
  9. 变量、作用域和内存问题
  10. 【web前端】a只显示visited属性问题解决方法
  11. 切图具体需要切什么内容_什么是切图?网页制作中的切图是什么?
  12. android开发 自我优势_android开发简历自我评价怎么写
  13. Tensorflow教程之语音识别
  14. 报The requested URL / was not found on thisserver. 网站打开出现404
  15. 《青玉案·元夕》 辛弃疾
  16. origin3D作图surface和等高线图contor
  17. 快速学习编程语言,快速高效的入门
  18. revit卸载/完美解决安装失败/如何彻底卸载清除干净revit各种残留注册表和文件的方法
  19. ae打开模板显示不出来_打开AE模板提示缺少rsmb pro插件的解决办法
  20. 创新药、大协同,科天云助力信达生物全球创新研发

热门文章

  1. 野生前端的数据结构基础练习(6)——集合
  2. NVDLA软件架构和源码解析 第一章—内核驱动
  3. Redis事务和秒杀业务设计
  4. 2021-07-12 原来我用的是CPU,更改方法
  5. 如何查看pytorch中层的名字
  6. 广告拦截之easylist和easylistchina订阅地址
  7. 怎样在word中同时输入上下标
  8. day4 java中print,printf,println的区别
  9. java 资深_Java架构师之路:从Java码农到资深架构师
  10. datareader对象转化为int_【Angew. Chem. Int. Ed.】光催化丙二烯的去消旋反应