【bzoj1299】[LLH邀请赛]巧克力棒(博弈论思维题)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1299
首先我们把每根巧克力棒看成一堆石子,把巧克力棒的长度看作石子的个数,那么原问题就可以看成一个经典的nim问题(取石子问题)的变种,它和原问题的区别在于每堆石子需要经过一步操作解封后才能从里面取出石子。
这道博弈题的思维方式和普通题不太一样,不能通过简单的构造sg函数的方法解决。但是我们可以注意到它和普通的nim游戏的一些相同之处:即同样是从几堆石子中从某一堆拿若干个石子出来。即,若当前石子个数的nim和(石子个数的异或和)为0,那么无论如何操作(从某一堆中拿石子或解封一堆石子),都会使操作后的nim和不为0;若当前石子个数的nim和不为0,那么总有一种方法把操作后的nim和变为0。
那么,我们先手如果可以从盒子里拿出若干根长度异或和为0的巧克力棒,那么就可以把必败局面扔给对方使自己必胜;否则对方总有一种的方法使拿出的巧克力棒长度异或和为0,把必败局面扔给你。
找异或和为0的子集这种事,对于$ n<=14 $的数据来说,怎么做都能过的吧。。
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000000
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 1000010
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
using namespace std;
int a[];
int n;
void work()
{
n=read();
for(int i=;i<n;i++)
a[i]=read();
int flag=;
for(int i=;i<<<n;i++){
int k=;
for(int j=;j<n;j++)
if(i&(<<j))k^=a[j];
if(!k){
flag=; break;
}
}
if(flag)printf("NO\n");
else printf("YES\n");
}
int main()
{
int t=;
while(t--)work();
}
bzoj1299
【bzoj1299】[LLH邀请赛]巧克力棒(博弈论思维题)的更多相关文章
- BZOJ1299: [LLH邀请赛]巧克力棒(Nim游戏)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 552 Solved: 331[Submit][Status][Discuss] Descriptio ...
- BZOJ1299 [LLH邀请赛]巧克力棒
怎么又是博弈论...我去 Orz hzwer,这道题其实是可以转化成Nim游戏的! "第一步: 先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n ...
- B1299 [LLH邀请赛]巧克力棒 博弈论
这个题一看就是nim游戏的变形.每次先手取出巧克力就是新建一个nim,但假如先手取一个为0的而且无论后手怎么取剩下的都无法为零就行了.然后用dfs跑. 题干: Description TBL和X用巧克 ...
- BZOJ1299[LLH邀请赛]巧克力棒——Nim游戏+搜索
题目描述 TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒). ...
- BZOJ.1299.[LLH邀请赛]巧克力棒(博弈论 Nim)
题目链接 \(Description\) 两人轮流走,每次可以从盒子(容量给定)中取出任意堆石子加入Nim游戏,或是拿走任意一堆中正整数个石子.无法操作的人输.10组数据. \(Solution\) ...
- 【bzoj1299】[LLH邀请赛]巧克力棒 博弈+模拟
Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮 ...
- 【BZOJ】1299: [LLH邀请赛]巧克力棒
[算法]博弈论 [题解]这道题不是典型的SG函数题了. 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏. 我们当前先手,则考虑构造必败态来获胜. 当前已加入的NIm ...
- bzoj:1299: [LLH邀请赛]巧克力棒
原题:http://www.lydsy.com/JudgeOnline/problem.php?id=1299 众多dalao的题解已经很详细了:http://blog.csdn.net/wzq_qw ...
- BZOJ 1299: [LLH邀请赛]巧克力棒 [组合游戏]
每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度. Nim游戏多了一个决策:拿出一些石堆 显然只要给对方构造异或和为0的子集就行了 暴枚子集... #include &l ...
随机推荐
- scrapy 简介
Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy架构图(绿线是数据流向): Scrapy Engine(引擎): 负责Spider.ItemPip ...
- caffe小问题汇总(持续更新)
PS:所有问题均在caffe-windows下产生 1.为什么AlexNet中,InnerProduct_Layer(fc8)层的输出可以直接作为Accuracy_Layer层的输出? 答:首先,我们 ...
- (转载)java提高篇(五)-----抽象类与接口
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 本文是转载的(尊重原著),原文地址:http://www.cnblogs.com/chenssy/p/3376708.html 抽象类 ...
- JavaScript中对事件简单的理解
事件(event) 1.什么是JavaScript事件? 事件是文档或浏览器中发生的特定交互瞬间. 2.事件流 事件流描述的是从页面中接受事件的顺序,包含IE提出的事件冒泡流与Netscape提出的事 ...
- python cookbook第三版学习笔记二十:可自定义属性的装饰器
在开始本节之前,首先介绍下偏函数partial.首先借助help来看下partial的定义 首先来说下第一行解释的意思: partial 一共有三个部分: (1)第一部分也就是第一个参数,是一个函数, ...
- centos7安装nodejs 和 yarn
如何从EPEL库安装Node.js 另一个有效且简单的方法来安装Node.js就是从官方库.这同样确保您可以访问到EPEL库,你可以通过运行以下命令. sudo yum install epel-re ...
- MyISAM VS InnoDB
A.构成上的区别: InnoDB只在磁盘上存储一个文件.frm 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型: 文 ...
- K-M-P
分段K-M-P 只需要记录上一段已经匹配了的长度,再接着从匹配下一段就可以了.
- corethink功能模块探索开发(六)让这个模块在前台显示
效果图:(注意右上角) 实现模块的前台显示只需要在模块目录中的Controller目录建立IndexController.class.php,实现index方法.继承HomeController.就能 ...
- 【AWS】AWS云计算赋能数字化转型专题研讨会圆满落幕
大会精彩回顾:查看原文 大会使用的PPT下载地址:点击下载