洛谷$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:据某大佬说其实可以离线之后 ...
随机推荐
- 模板—Hash_map
struct Hash_map { ],nx[]; ];]; inline double &operator [] (int x) { ,i=fi[k]; for(;i&&st ...
- docfx 做一个和微软一样的文档平台
开发中,有一句话叫 最不喜欢的是写文档,最不喜欢的是看别人家代码没有文档.那么世界上文档写最 la 好 ji 的就是微软了,那么微软的api文档是如何做的?难道请了很多人去写文档? 实际上微软有工具用 ...
- laravel框架手机发送验证码
https://blog.csdn.net/sunny_lg/article/details/52471225 现在登录注册时 我们的验证方法 不在单一化 手机发送验证码 已经成为常态 让我们 一起 ...
- poj1741 树上距离小于等于k的对数 点分治 入门题
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...
- Layer(Web弹窗)
Layer弹窗的用法: <script src="jQuery的路径"></script> <!-- 你必须先引入jQuery1.8或以上版本 --& ...
- laravel5.*安装使用Redis以及解决Class 'Predis\Client' not found和Fatal error: Non-static method Redis::set() cannot be called statically错误
https://phpartisan.cn/news/35.html laravel中我们可以很简单的使用Redis,如何在服务器安装Redis以及原创访问你们可以访问Ubuntu 设置Redis密码 ...
- 洛谷P1595 信封问题 题解 错排问题
作者:zifeiy 标签:排列组合,错排问题 题目链接:https://www.luogu.org/problem/P1595 题目描述:某人写了n封信和n个信封,如果所有的信都装错了信封.求所有信都 ...
- Vue的Router路由传参
一.文件结构 二.vue.js 打开此链接 https://cdn.bootcss.com/vue/2.6.10/vue.js 复制粘贴页面的所有内容 三.vue-router.js 打开此链接 h ...
- spring json 返回中文乱码
如前台显示的json数据中的中文为???,则可尝试以下方法. 方法一(推荐):在@RequestMapping中添加 produces={"text/html;charset=UTF-8; ...
- Redux 认识之后进阶
两个东西 action 状态 路由 以及嵌套路由 完整结构 进阶+源代码 源代码在我的 gitHub 存储库里面 https://github.com/Haisenan/Redux2.0