![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
博弈论
EMber _
人但有追求,世界亦会让路。
展开
-
HDU 1846 Brave game 博弈论
题意:T组数据,每次给出n,m(<=1000),有n张牌,两个人,每次只能取1-m张牌,最后不能取的人输,问谁赢得是先手还是后手。分析:根据sg函数的性质可以知道,只要n%(m+1)==0必输,否则必赢。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int原创 2017-04-06 09:50:40 · 214 阅读 · 0 评论 -
HDU 2188 巴什博弈
分析:还是和上一题一样裸。。没有1A,被大小写和换行坑了。。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace s原创 2017-04-06 10:03:12 · 220 阅读 · 0 评论 -
bzoj1777[Usaco2010 Hol]rocks 石头木头
题意简化一下其实就是树上移子问题。 分析:在询问前求出每个点的SG函数,xor,然后改变值以后再来一遍,得到的就是全局的sg值,然后判断输出就可以了。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(原创 2017-04-06 11:07:15 · 328 阅读 · 0 评论 -
bzoj1188[HNOI2007]分裂游戏
Description聪聪和睿睿最近迷上了一款叫做分裂的游戏。 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2…..n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择 3 个瓶子。标号为 i,j,k, 并要保证 i < j , j < = k 且第 i 个瓶子中至少要有 1 颗巧克力豆,随后这个人从第 i 个瓶子中拿走一颗豆 子并在 j,k 中各放入一粒豆原创 2017-04-06 17:15:48 · 296 阅读 · 0 评论 -
bzoj1299 [LLH邀请赛]巧克力棒
DescriptionTBL和X用巧克力棒玩游戏。每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度。TBL先手两人轮流,无法操作的人输。 他们以最佳策略一共进行了10轮(每次一盒)。你能预测胜负吗?Input输入数据共20行。 第2i-1行一个正整数Ni,表示第i轮巧克力棒的数目。 第2i行Ni个正整数Li,j,表示第i轮巧克力棒的长度。Output输出数据共10行。原创 2017-04-06 20:29:00 · 383 阅读 · 0 评论 -
bzoj1115[POI2009]石子游戏Kam 阶梯NIM
题意:有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。我们把相邻两堆的差值看作石子,然后每一次操作就相当于把一堆石子移动到另一堆石子上去,这样就变成了阶梯NIM。阶梯NIM 两个人在阶梯上玩推石子游戏,每人操作可以将某堆的任意多石子向左推一阶 所有的石原创 2017-05-09 17:04:05 · 305 阅读 · 0 评论 -
bzoj2281&&jzoj2308[Sdoi2011]黑白棋 博弈论+动态规划
题意略。明显可以发现如果黑白都是相邻的那么肯定先手必输,根据这个策略就可以做到30分。 还有40分水法但是我不会,很简单的一个式子,好像只有在一定情况下才能符合。 能考场上或者自己切满分算法的我只能跪下来膜拜。 既然已经知道必败态,那么我们可以假设第i个白色棋子和第i个黑色棋子互相匹配,那么一连串下来其实就可以把模型化为:把他们中间的格子看成石子堆,变成一个每次可以取d堆的nim游戏那么问题就原创 2017-07-14 20:42:41 · 427 阅读 · 0 评论 -
bzoj3609 [Heoi2014]人人尽说江南好 博弈
表示 并不会打表,太久没有做博弈题了。 好像也不是很难的样子,就是加了个限制= = 那我最后最少要有n/m堆,那么前面的几堆都是满的,唯一不是满的的那一堆的数量是n%m。 然后我们模拟最后那一步是谁走的,就知道最终答案了。 具体的话直接算出来前面合并了多少步,合成i需要i-1步= =#include<cstdio>using namespace std;int n,m;int ans原创 2017-08-01 16:46:52 · 453 阅读 · 0 评论