BZOJ3759: Hungergame 博弈论+线性基

学了新的忘了旧的,还活着干什么

题意:一些盒子,每步可选择打开盒子和取出已打开盒子的任意多石子,问先手是否必胜

搬运po姐的题解:

先手必胜的状态为:给出的数字集合存在一个异或和为零的非空子集,则先手必胜

证明:

首先我们有状态A:当前的所有打开的箱子中的石子数异或和为零,且所有关闭的箱子中的石子数的集合中不存在一个异或和为零的非空子集

易证A状态时先手必败

先手有两种操作:

1.从一个打开的箱子中拿走一些石子 那么根据Nim的结论 后手可以同样拿走一些石子使状态恢复为A状态

2.打开一些箱子 由于未打开的箱子中不存在一个异或和为零的非空子集 所以打开后所有打开的箱子中石子数异或和必不为零 于是后手可以拿走一些石子使状态恢复为A状态

故此时先手必败

那么如果初始不存在一个异或和为零的非空子集,那么初始状态满足状态A,先手必败

如果初始存在一个异或和为零的非空子集,那么先手一定可以打开所有的异或和为零的子集,使剩余箱子不存在异或和为零的非空子集,将状态A留给后手,先手必胜

然后就是判断是否有子集异或为0,线性基求一下。

update:其实当n>32时可以直接判断先手胜,因为int范围考虑每一个二进制位一定会有异或为0的

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define N 35
 4 int read(){
 5   int x=0,f=1;char ch=getchar();
 6   while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 7   while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
 8   return x*f;
 9 }
10 int n,a[N],b[N];
11 bool gauss(){
12   memset(b,0,sizeof(b));
13   for(int i=1;i<=n;i++){
14     for(int j=30;j>=0;j--)
15       if(a[i]>>j&1){
16         if(!b[j]){b[j]=a[i];break;}
17         else a[i]^=b[j];
18       }
19     if(!a[i])return 1;
20   }
21   return 0;
22 }
23 int main(){
24   int T=read();
25   while(T--){
26     n=read();
27     for(int i=1;i<=n;i++)a[i]=read();
28     puts(gauss()?"Yes":"No");
29   }
30   return 0;
31 }

View Code

3759: Hungergame

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 182  Solved: 131
[Submit][Status][Discuss]

Description

由于施惠国的统治极其残暴,每年从13个区中每个区中选出2名“贡品”参加饥饿游戏,而参加游戏的人必须在险恶的自然环境中杀死其余的人才能存活。游戏只会有一个人活下来 凯特尼斯•伊夫狄恩和同区的皮塔•麦拉克在历经千难万阻后活了下来,然而残忍的游戏只允许一人存活,正当两人准备同时吃下有毒的果实自杀的时候,统治者被打动了,他说:你们两个人跟我玩一个游戏,你赢了,我就让你们两个都活下来。女主角凯特尼斯•伊夫狄恩接受了挑战。
这个游戏是这样的,有n(n<=20)个箱子,每个箱子里面有ai(ai<=1000000000)个石头(怎么放进去的我就不知道了),两个人轮流进行操作(女主角先手),每一次操作可以将任意个(大于0个)未打开的箱子打开(一开始所有的箱子都是关闭的),或者在已经打开的一个箱子里拿走任意个(大于0个)石头(不能超过这个箱子现有的石头数)。最后谁无法操作谁就输了。
现在给出n,和这n个箱子里的石头数ai,女主角想知道她是否有绝对的把握取得胜利(很明显她的对手“统治者”是绝顶聪明的)。

Input

第一行有一个正整数T(表示有T组测试数据),对于每组测试数据有两行,第一行为一个正整数n,接下来有 n个数,第 i 个数表示ai.

Output

有T行:对于每一个测试数据,如果先手可以必胜则输出“Yes”,否则输出“No”(没有引号)。

Sample Input

5
5
18 11 16 19 15
5
18 12 17 10 18
5
17 7 1 10 1
5
19 5 16 19 8
5
18 18 7 4 9

Sample Output

No
Yes
Yes
Yes
Yes

HINT

100%的数据:n<=20,T<=10,ai不超过1,000,000,000;

posted on 2016-06-17 10:44  wjyi 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/wjyi/p/5593269.html

BZOJ3759: Hungergame 博弈论+线性基相关推荐

  1. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  2. BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)

    题意 题目链接 Sol 线性基是可以合并的 倍增维护一下 然后就做完了?? 喵喵喵? // luogu-judger-enable-o2 #include<bits/stdc++.h> # ...

  3. HDU3949(线性基算法模版)

    题意:给出N个数,再给出q次查询,每一次的查询在N个数中的值进行异或后第k小的值是多少! 这个线性基我也今天刚学,也只是在套模版,有些地方感觉有点难理解! #include<iostream&g ...

  4. 线性基+树上倍增 ---- BZOJ4568[线性基+树上倍增]

    题目链接 题目大意:就是给你一棵树,每个树上的节点都有一个权值,现在给你一个询问u和v问你这个路径上面挑任意几个数进行xor运算,问你xor最大值是多少 解题思路:对于每个点我们可以维护它向根节点上面 ...

  5. Luogu P5556 圣剑护符(线性基,树链剖分,线段树)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 小L 和 小K 面前的圣剑由 nnn 块护符组成,分别编号为 1,2,-,n1,2,\ ...

  6. HDU3949 XOR (线性基、查找第k小值)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 我们用高斯消元求出的a1,a2,-,ana_1,a_2, \dots,a_na1​,a2​,-,an​ ...

  7. 2017年ICPC西安邀请赛A、XOR(线段树套线性基 + 思维)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目传送门 Problem 给你 nnn 和 nnn 个整数的数组 aaa,以及kkk和qqq,有 q ...

  8. CF724G Xor-matic Number of the Graph(线性基+组合数)

    题目描述 给你一个无向图,有n个顶点和m条边,每条边上都有一个非负权值. 我们称一个三元组(u,v,s)是有趣的,当且仅当对于u,v,有一条从u到v的路径(可以经过相同的点和边多次),其路径上的权值异 ...

  9. [洛谷3812]【模板】线性基

    题目大意: 给你n个数,求这些数能异或出的数的最大值. 思路: 线性基模板. b中的数满足对于每个b[i],最高位在第i位. 构造方法就是对于每个数字,从高到低枚举每一个1,如果这一位对应的b[i]还 ...

最新文章

  1. 网络编程中的大端和小端
  2. ASP在中小企业中具有巨大的潜在市场
  3. mysql常见报错解决办法
  4. 连接多个oracle数据库的配置,oracle数据库连接配置文件
  5. python歌星大赛评分_2018年机器阅读理解技术竞赛模型,BLEU-4评分排名第6, ROUGE-L评分排名第14...
  6. windows连接mysql程序_windows 连接mysql
  7. [转]在Windows server 2012上部署DPM 2012 SP1 RTM之先决条件准备
  8. js基础知识汇总01
  9. [Luogu P4630] [BZOJ 5463] [APIO2018] Duathlon 铁人两项
  10. 导航栏一级标题上下箭头切换
  11. pulseaudio-点点滴滴
  12. C# 单个按钮实现暂停或继续
  13. C++使用OLE高速读写EXCEL的源码
  14. 紫罗兰计算机音乐,【Animenz】紫罗兰永恒花园ed みちしるべ
  15. 矫正ubuntu系统时间
  16. 总结一波 Redis 面试题,收藏起来!
  17. 关于职业选择讲座的笔记
  18. 2021 数据挖掘与大数据分析复习笔记 电子科技大学《数据挖掘与大数据分析期末》课程期末高分指南
  19. 一站式在线医疗解决方案,即构音视频技术助建互联网医疗
  20. 计算机专业有何特长怎么填写,计算机专业简历怎么写

热门文章

  1. Android逆向之smali语法
  2. inshot怎么转gif_InShot – 强大易用的视频剪辑/编辑/制作工具 [iPhone]
  3. 在linux下离线安装MySQL
  4. Android BLE设置MTU大小
  5. 马斯克反对英伟达并购ARM
  6. 漫画衣服褶皱怎么画?怎样才能画好漫画衣服褶皱?
  7. Map遍历的几种方式
  8. android音乐播放器课程设计报告,基于AS3.0的音乐播放器设计课程设计报告.doc
  9. POC-T框架学习————8、相关脚本深入学习四
  10. android 6.0的DozeMode低功耗模式 及 引起的进程保活问题