[BZOJ1299]巧克力棒(博弈论)

题目:http://hzwer.com/1976.html

分析:先Orz hzwer

对于盒子外面的巧克力棒,就是Nim游戏。

所以就很容易想到先手第一步最好从盒子中取出m根巧克力棒,使得这些巧克力棒的异或和为0,并且盒子中剩余的巧克力棒无论如何取出来都不能得到异或和为0(其实m就是所有巧克力棒的最长异或和为0的子序列)

那么对于后手,无论是吃盒子外面的,还是拿盒子里面的,都是必败的

所以先手必胜当且仅当存在m,使得m个巧克力棒的异或和为0

时间: 2024-09-29 17:23:28

[BZOJ1299]巧克力棒(博弈论)的相关文章

B1299 [LLH邀请赛]巧克力棒 博弈论

这个题一看就是nim游戏的变形.每次先手取出巧克力就是新建一个nim,但假如先手取一个为0的而且无论后手怎么取剩下的都无法为零就行了.然后用dfs跑. 题干: Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒).你能预测胜负吗? Input 输入数据共20行. 第2i-1行一个正整数Ni,表示第i轮巧克力棒的数目. 第2i行Ni个正整数

[bzoj1299]巧克力棒

为了方便考虑,不妨规定只有当当前的巧克力棒都取完了,才能拿新的巧克力棒然后令先手第一个拿的集合为S,根据nim游戏,当S的xor不为0时先手(即原来的后手)必胜,又轮到先手拿集合,那么只要一直不存在xor为0的集合,先手最终就必败然后当存在xor为0的集合,那么先手必然可以做到取一个最大xor子集,那么剩下的集合中一定不存在xor为0的子集(否则就可以更大),然后就变成了先手必胜判断是否存在xor为0的子集可以用线性基来判定(当然这个n太小暴力也行) 1 #include<bits/stdc++

【bzoj1299】[LLH邀请赛]巧克力棒(博弈论思维题)

题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1299 首先我们把每根巧克力棒看成一堆石子,把巧克力棒的长度看作石子的个数,那么原问题就可以看成一个经典的nim问题(取石子问题)的变种,它和原问题的区别在于每堆石子需要经过一步操作解封后才能从里面取出石子. 这道博弈题的思维方式和普通题不太一样,不能通过简单的构造sg函数的方法解决.但是我们可以注意到它和普通的nim游戏的一些相同之处:即同样是从几堆石子中从某一堆拿若干个石子出来.即

BZOJ1299 [LLH邀请赛]巧克力棒

怎么又是博弈论...我去 Orz hzwer,这道题其实是可以转化成Nim游戏的! "第一步: 先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n-m根巧克力棒无论怎么取,xor和都不为0. m根巧克力棒的xor和为0 <=>把nim游戏的必败状态留给对方 剩下的n-m根巧克力棒无论怎么取,xor和都不为0 <=>  m为巧克力棒的xor和为0的最长子序列 第二步: 第一步以后,对手就面临一个必败状态的nim游戏. 如果他从n-

【bzoj1299】[LLH邀请赛]巧克力棒 博弈+模拟

Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒).你能预测胜负吗? Input 输入数据共20行. 第2i-1行一个正整数Ni,表示第i轮巧克力棒的数目. 第2i行Ni个正整数Li,j,表示第i轮巧克力棒的长度. Output 输出数据共10行. 每行输出“YES”或“NO”,表示TBL是否会赢.如果胜则输出”NO”,否则输出”YES

BZOJ1299: [LLH邀请赛]巧克力棒(Nim游戏)

Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 552  Solved: 331[Submit][Status][Discuss] Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒).你能预测胜负吗? Input 输入数据共20行. 第2i-1行一个正整数Ni,表示第i轮巧克力棒的数目.

【算法总结】博弈论相关

[相关资料] <博弈论 SG函数> [相关题目] 1.[bzoj1188][HNOI2007]分裂游戏 题意:共有n个瓶子,标号为0,1,2.....n-1,第i个瓶子中装有p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择3个瓶子,标号为i,j,k,并要保证i<j,j<=k且第i个瓶子中至少要有1颗巧克力豆.随后这个人从第i个瓶子中拿走一颗豆子并在j,k中各放入一粒豆子(j可能等于k).如果轮到某人而他无法按规则取豆子,那么他将输掉比赛.问先手必胜策略的第一步方案. 分析:hz

hdu 1536 S-Nim 博弈论,,求出SG&#39;函数就可以解决

S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4975    Accepted Submission(s): 2141 Problem Description Arthur and his sister Caroll have been playing a game called Nim for some time now

UVA 10561 Treblecross(博弈论)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32209 [思路] 博弈论. 根据X分布划分禁区,每个可以放置的块为单独一个游戏.按长度定义状态,构造sg函数.依次试验每一种放法. [代码] 1 #include<cstdio> 2 #include<vector> 3 #include<cstring> 4 #include<algorithm> 5 using names