洛谷$P$4301 $[CQOI2013]$新$Nim$游戏 线性基+博弈论
正解:线性基
解题报告:
这题其实就是个博弈论+线性基,,,而且博弈论还是最最基础的那个结论,然后线性基也是最最基础的那个板子$QwQ$
首先做这题的话需要一点点儿博弈论的小技能,,,这题的话就是,博弈论的入门经典题,有个结论是当开局的时候所有数异或起来不等于0的时候先手必胜
这儿瞎证下趴,,,因为是入门$so$还是比较$easy$证的来着$QwQ$
就考虑把所有数换算成二进制的
如果石子数异或和不为0,那么考虑如果先手能通过取石子数使石子数异或和为0的话,那么接下来要不就还存在石子数,要不就没有了
在没有的情况下就先手获胜了嘛,不说
如果还有,后手就一定会取,就一定会在取了之后异或起来不等于0
然后就又轮到先手,就又变成了异或和不为0的情况,就只要通过取石子使得石子数异或起来又=0就欧克了,这个显然就很$easy$了鸭,就是把所有不为0的位$i$的$2^{i}$加起来取走就可以了,显然这个值是小于等于最大堆的石子数的,太显然不证了$QAQ$
综上,就证完了$NIM$游戏的必胜战略:当开局所有数异或起来不等于0的时候先手必胜
然后这题有了这个结论其实就比较简单了鸭$QwQ$
就考虑能不能通过取石子使得开局异或起来一定不等于0
现在考虑把先手第一轮取走了石子之后剩余石子的状态搞一个线性基,然后显然的是如果有一个石子数是可以被异或出来的,先手就$GG$了,就后手可以通过直接取走那堆石子使得异或起来=0,这时候先手就死了
然后现在如果能证出当任意一个一个石子堆不可以被其他石子堆表示出来时,后手一定不能通过第二轮把初始状态变为所有数异或起来等于0,这题就变成一个线性基板子题了$QwQ$
下面瞎证下趴,,,$QwQ$
不想证了感觉是显然,,,就因为不存在$a_{1}$^$a_{2}$^$... = a_{n} $
所以不可能有拿走了$ a_{n} $之后异或和=0的情况
然后证完之后,就直接贪心从大到小能加就加,不说了挺$easy$的还是$QwQ$,不能$get$的打开那个板子题的题解趴
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define int long long
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=1e5+;
int n,ston[N],tot;
struct xxj
{
int a[];
il bool insrt(ri x)
{
my(i,,)
if(x&(<<i))
{
if(a[i])x^=a[i];
else return a[i]=x,;
}
return ;
}
}gdgs; il int read()
{
ri x=;rb y=;rc ch=gc;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(ri gd,ri gs){return gd>gs;} main()
{
n=read();rp(i,,n)ston[i]=read();sort(ston+,ston+n+,cmp);rp(i,,n)if(!gdgs.insrt(ston[i]))tot+=ston[i];printf("%lld\n",tot);
return ;
}
洛谷$P$4301 $[CQOI2013]$新$Nim$游戏 线性基+博弈论的更多相关文章
- BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论
BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论 Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作 ...
- BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基
[题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...
- BZOJ3105:[CQOI2013]新Nim游戏(线性基,贪心)
Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴 ...
- [CQOI2013]新Nim游戏 线性基
题面 题面 题解 首先我们知道nim游戏先手必败当且仅当所有石堆异或和为0,因此我们的目标就是要使对手拿石堆的时候,无论如何都不能使剩下的石堆异或和为0. 对于一个局面,如果我们可以选取一些可以凑出0 ...
- BZOJ 3105: [cqoi2013]新Nim游戏(线性基)
解题思路 \(nim\)游戏先手必胜的条件是异或和不为\(0\),也就是说第一个人拿走了若干堆后不管第二个人怎么拿都不能将剩余堆的异或和变成\(0\).考虑线性基,其实就是每个数对线性基都有贡献,任何 ...
- 洛谷P4151 最大XOR和路径 [WC2011] 线性基+图论
正解:线性基+图论 解题报告: 传送门 首先可以思考一下有意义的路径会是什么样子,,,那就一定是一条链+一些环 挺显然的因为一条路径原路返回有没有意义辣?所以一定是走一条链+一些环(当然也可以麻油环, ...
- BZOJ.3105.[CQOI2013]新Nim游戏(线性基 贪心 博弈论)
题目链接 如果后手想要胜利,那么在后手第一次取完石子后 可以使石子数异或和为0.那所有数异或和为0的线性基长啥样呢,不知道.. 往前想,后手可以取走某些石子使得剩下石子异或和为0,那不就是存在异或和为 ...
- 洛谷P4151 [WC2011] 最大XOR和路径 [线性基,DFS]
题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的 ...
- 洛谷P3292 [SCOI2016]幸运数字(倍增+线性基)
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 第一眼:这不会是个倍增LCA暴力合并线性基吧…… 打了一发……A了? 所以这真的是个暴力倍增LCA合并线性基么…… ps:据某大佬说其实可以离线之后 ...
随机推荐
- PHP中header头设置Cookie与内置setCookie的区别
首先声明,浏览的Cookie操作都是通过HTTP Header(俗称“Http头”) 来实现.所有的服务器与客户端之间Cookie数据传输都是通过Http请求头来操作. PHP中setCookie(函 ...
- Header和Cookie相关内容
相信很多同学都对HTTP的header和cookie,和session都有疑问,因为我们开发的时候一般都需要请求网络获取数据,有时候还需要带cookie或者带特殊的字段发起请求. 现在我们就来简单的了 ...
- Python基础:24with语句
一:with语句 在Python 2.6 中正式引入的with语句,是用来简化代码的.这与用try-except 和try-finally所想达到的目的前后呼应.try-except 和try-fin ...
- Android 高仿微信(QQ)滑动弹出编辑、删除菜单效果,增加下拉刷新功能
不可否认,微信.QQ列表的滑动删除.编辑功能着实很经典(从IOS那边模仿过来的),然.Android这边,对列表的操作,其实大多还停留上下文菜单来实现. Android如何实现list item的滑动 ...
- python selenium 测试 LOG
1.首先在根目录中新建一个Logs文件夹,写入文件 2.在framework文件夹中写入logger.py 3.在testsuits文件夹中写入test_log.py logger.py # _*_ ...
- jvm内存监控
jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程 ...
- 解析P2P金融的业务安全
看了很多乙方同学们写的业务安全,总结下来,其出发点主要是在技术层面风险问题.另外捎带一些业务风险.今天我要谈的是甲方眼里的业务安全问题,甲方和乙方在业务安全的视野上会有一些区别和一些重合.在同一个问题 ...
- poj 2442 Sequence (Priority Queue)
2442 -- Sequence 真郁闷,明明方法是对的,为什么我的代码老是那么的慢._(:з」∠)_ 这题要想考虑两列的情况,然后逐列拓展. 代码如下: #include <cstdio> ...
- angular input框点击别处 变成不可输入状态
<input type="text" ng-model="edit" ng-disabled="!editable" focus-me ...
- ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries...
2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法, 后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法: 1. 定义变 ...