【BZOJ1299】巧克力棒(博弈论,线性基)
【BZOJ1299】巧克力棒(博弈论,线性基)
题面
题解
\(Nim\)博弈的变形形式。
显然,如果我们不考虑拿巧克力棒出来的话,这就是一个裸的\(Nim\)博弈。
但是现在可以加入巧克力棒。加入巧克力棒的意义是修改当前的异或和。
如果不能够改变当前先后手赢的状态的话,那么必定不能够拿出一个巧克力棒的集合满足异或和为\(0\)。
初始情况下是先手必败的情况,因为先后不改变当前的必胜/必败情况,所以先手必须要拿出一个异或和为\(0\)的集合,并且使得剩下的部分不能够存在异或和为\(0\)的子集。不难证明如果剩下部分存在一个异或和为\(0\)的子集的话,必定也可以把这个子集拿出来使得不存在子集使得异或和为\(0\)。
那么,唯一需要判定的只剩下是否存在一个子集使得异或和为\(0\)了。直接线性基即可。
时间复杂度\(O(Tnlog)\),所以\(n\)其实想出多大出多大,因为线性基内的元素个数最多不会超过\(log\)个,否则必定会出现线性相关,即存在一个子集满足异或和为\(0\)。
也就是说,真正的时间复杂度其实是\(O(Tmin(n,log)log)\)的,当\(n\)较大的时候瓶颈在于读入。
然而这题\(n\)小得可怜,直接暴力\(dfs\)都是可以的。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 15
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct xxj
{
int p[31];
bool insert(int x)
{
for(int i=30;~i;--i)
if(x&(1<<i))
{
if(!p[i]){p[i]=x;return true;}
x^=p[i];
}
return false;
}
void clear(){memset(p,0,sizeof(p));}
}G;
int n,a[MAX];
int main()
{
int T=10;
while(T--)
{
n=read();
for(int i=1;i<=n;++i)a[i]=read();
G.clear();bool fl=false;
for(int i=1;i<=n;++i)
if(!G.insert(a[i]))fl=true;
puts(fl?"NO":"YES");
}
return 0;
}
【BZOJ1299】巧克力棒(博弈论,线性基)的更多相关文章
- BZOJ3105: [cqoi2013]新Nim游戏 博弈论+线性基
一个原来写的题. 既然最后是nim游戏,且玩家是先手,则希望第二回合结束后是一个异或和不为0的局面,这样才能必胜. 所以思考一下我们要在第一回合留下线性基 然后就是求线性基,因为要取走的最少,所以排一 ...
- BZOJ3759: Hungergame 博弈论+线性基
学了新的忘了旧的,还活着干什么 题意:一些盒子,每步可选择打开盒子和取出已打开盒子的任意多石子,问先手是否必胜 搬运po姐的题解: 先手必胜的状态为:给出的数字集合存在一个异或和为零的非空子集,则先手 ...
- Nowcoder Playing Games ( FWT 优化 DP && 博弈论 && 线性基)
题目链接 题意 : 给出 N 个数.然后问你最多取出多少石子使得在 NIM 博弈中.后手必胜 分析 : Nim 博弈模型,后手必胜当且仅当各个堆的石子的数目的异或和为 0 转化一下.变成最少取多少石 ...
- darkbzoj #3759. Hungergame 博弈论 线性基 NIM
LINK:Hungergame 放上一道简单题 复习一下. 考虑每次可以打开任意多个盒子 如果全打开了 那么就是一个NIM游戏了. 如果发现局面是异或为0的时候此时先手必胜了. 考虑局面不全体异或为0 ...
- bzoj 3759 Hungergame 博弈论+线性基
和nim游戏类似 易证必败状态为:当前打开的箱子中石子异或和为0,没打开的箱子中不存在一个子集满足异或和为0 因为先手无论是取石子还是开箱子,后手都可以通过取石子来使状态变回原状态 所以只需判定是否有 ...
- 洛谷$P$4301 $[CQOI2013]$新$Nim$游戏 线性基+博弈论
正解:线性基 解题报告: 传送门! 这题其实就是个博弈论+线性基,,,而且博弈论还是最最基础的那个结论,然后线性基也是最最基础的那个板子$QwQ$ 首先做这题的话需要一点点儿博弈论的小技能,,,这题的 ...
- [BZOJ1299]巧克力棒(博弈论,线性基)
[BZOJ1299]巧克力棒 Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. ...
- BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论
BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论 Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作 ...
- BZOJ.3105.[CQOI2013]新Nim游戏(线性基 贪心 博弈论)
题目链接 如果后手想要胜利,那么在后手第一次取完石子后 可以使石子数异或和为0.那所有数异或和为0的线性基长啥样呢,不知道.. 往前想,后手可以取走某些石子使得剩下石子异或和为0,那不就是存在异或和为 ...
随机推荐
- 11-vue的使用
一.安装 对于新手来说,强烈建议大家使用<script>引入 二. 引入vue.js文件 我们能发现,引入vue.js文件之后,Vue被注册为一个全局的变量,它是一个构造函数. 三.使用V ...
- Java中有关Null的9件事(转)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- Redis 使用命令行的方式 获取 hash type key 的value值
1. 之前只是非常简单的看了下 get key 和 set key 但是这样 设置的 key value 应该是都 string 类型的 2. 但是没考虑过其他类型的 是如何获取 相关内容的 ,一直 ...
- vue上传图片到服务器
https://blog.csdn.net/qq_29712995/article/details/78839093(copy) HTML代码: <input accept="imag ...
- centos6.5安装配置NTP,集群各机器间时间同步
试验环境 提君博客原创 >>提君博客原创 http://www.cnblogs.com/tijun/ << IP 主机名 角色 描述 同步方式 192.168.11.11 ...
- liunx 运维知识四部分
一. 权限介绍及文件权限测试 二. 目录权限测试 三. 默认控制权限umask 四. chown修改属性和属组 五. 网站安全权限介绍 六. 隐藏属性介绍 七. 特殊权限s 八. 特殊权限t 九. 用 ...
- CART算法与剪枝原理
参考:https://blog.csdn.net/u014688145/article/details/53326910 知乎:https://www.zhihu.com/question/22697 ...
- ArcGIS 添加 MarkerSymbol 弹出“图形符号无法序列化为 JSON”错误
今天在做一个demo,向自定义图层中添加MarkerSymbol的时候,弹出“图形符号无法序列化为 JSON”错误,之前都没有出现过这个问题,我们首先来看一看我是怎样去添加图层,然后向图层中添加Gra ...
- Vue.js文档
参考网址:https://vuefe.cn/ 第一 安装 1.下载到本地后使用<script>标签直接引入 2.使用CDN引入 例如:使用CDN引入 <script src=&qu ...
- echo显示颜色
如有转载,不胜荣幸.http://www.cnblogs.com/aaron-agu/ [;;34m hello aaron \[0m”