BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论
BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论
Description
Input
Output
Sample Input
5 5 6 6 5 5
Sample Output
HINT
k<=100
传统Nim游戏先手必胜当且仅当石子异或和不为0.
也就是说后手要尽可能选择一些数,是剩下的异或和为0.
转化为这样一个问题,删去尽可能少的石子,使得剩下的不存在一种方案使拿出的异或和为0。
即选择尽可能多的石子使他们线性不相关。
线性基贪心即可。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int b[50],a[150],n;
ll sum;
bool cmp(int x,int y) {return x>y;}
bool insert(int x) {
int i;
for(i=30;i>=0;i--) {
if(x&(1<<i)) {
if(b[i]) x^=b[i];
else {
b[i]=x; return 1;
}
}
}
return 0;
}
int main() {
scanf("%d",&n);
int i;
for(i=1;i<=n;i++) scanf("%d",&a[i]),sum+=a[i];
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++) {
if(insert(a[i])) sum-=a[i];
}
printf("%lld\n",sum);
}
BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论的更多相关文章
- 【BZOJ3105】[cqoi2013]新Nim游戏 贪心+线性基
[BZOJ3105][cqoi2013]新Nim游戏 Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个 ...
- [CQOI2013]新Nim游戏(线性基)
P4301 [CQOI2013]新Nim游戏 题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴. ...
- bzoj 3105: [cqoi2013]新Nim游戏【线性基+贪心】
nim游戏的先手必胜条件是所有堆的火柴个数异或和为0,也就是找一个剩下火柴堆数没有异或和为0的子集的方案,且这个方案保证剩下的火柴个数总和最大 然后我就不会了,其实我到现在也不知道拟阵是个什么玩意-- ...
- 洛谷P4301 [CQOI2013]新Nim游戏(线性基)
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 后手在什么时候能够获胜呢?只有在他能构造出一个子集的异或和为0时(这个应该是nim博弈的结论了吧) 那么为了必胜,我们就要取到没有子集异或和为0为止 ...
- 【题解】 bzoj3105: [cqoi2013]新Nim游戏 (线性基+贪心)
bzoj3105,懒得复制 Solution: 首先你要有一个前置技能:如果每堆石子异或和为\(0\),则先手比输 这题我们怎么做呢,因为我们没人要先取掉几堆,为了赢对方一定会使剩下的异或和为\(0\ ...
- bzoj3105 [cqoi2013]新Nim游戏——贪心+线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3105 首先,要先手必胜,就不能取后让剩下的火柴中存在异或和为0的子集,否则对方可以取成异或和 ...
- AcWing 229. 新NIM游戏 (线性基+博弈论)打卡
题目:https://www.acwing.com/problem/content/description/231/ 题意:给出n堆石子,然后第一回合,A玩家可以随便拿多少堆石子,第二回合B玩家随便拿 ...
- 【BZOJ3105】新Nim游戏(线性基)
[BZOJ3105]新Nim游戏(线性基) 题面 BZOJ Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以 ...
- BZOJ3105: [cqoi2013]新Nim游戏 博弈论+线性基
一个原来写的题. 既然最后是nim游戏,且玩家是先手,则希望第二回合结束后是一个异或和不为0的局面,这样才能必胜. 所以思考一下我们要在第一回合留下线性基 然后就是求线性基,因为要取走的最少,所以排一 ...
随机推荐
- HDU3572:Task Schedule【最大流】
上了一天课 心塞塞的 果然像刘老师那么说 如果你有挂科+4级没过 那基本上是WF队 题目大意:有时间补吧 思路:给每个任务向每个时间点连边容量为1 每个时间点向汇点连边 容量为机器的个数 源点向每个任 ...
- MTK android 重启测试脚本
@echo off set reboot_time=0 :start call adb -s 0123456789ABCDEF reboot set DATESTAMP=%DATE% set TIME ...
- C#中的各种排序算法
原文发布时间为:2008-11-26 -- 来源于本人的百度文章 [由搬家工具导入] C#算法(一)选择排序using System;public class SelectionSorter{ ...
- ES6__数据结构 Set
/* 数据结构 Set */ /* *集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中. *特点:key 和 val ...
- linux 安装问题make: 没有指明目标并且找不到makefile。 停止
错误发生的可能原因,忘记安装软件需要的依赖.
- Flex 4 自定义预加载器
本示例的目的是在Flash Professional里创建自定义预加载器SWC,并扩展SparkDownloadProgressBar类在Flex 4应用程序中使用. 预加载器显示加载进度百分比 ...
- Java面试题总结之JDBC 和Hibernate
1.100 用户同时来访数据库,要采取什么技术? 答:采用数据库连接池. 2.什么是ORM? 答:对象关系映射(Object—Relational Mapping,简称ORM)是一种为了解决面向对象与 ...
- 巧用MySQL AHI加速神器,让你的InnoDB查询飞起来!
DBAPLUS http://mp.weixin.qq.com/s/cIjQIz-ZngSYJ3k2ZBBSsg
- maven dependency:tree中反斜杠的含义
摘自:http://www.708luo.com/posts/2013/11/maven-dependency-slash-mark/ 一个mvn dependency:tree命令执行的输出如下: ...
- Meteor事件
使用事件是非常简单的.我们将学习如何使用tag,class 和id作为事件选择器. 让我们创建HTML模板三大要素.第一个是 p 标签,第二个是 myClass 类,最后一个是myId. meteor ...