博弈
swqeaaa
有问题可以吻我
展开
-
B - Marbles Gym - 101908B SG函数
有一堆棋子在棋盘上, A和B轮流走, 每次可以取一个棋子向上或向左走任意步, 或者向上以及向右走x步, 最先把一个棋子移动到0 0的人赢, 问A能不能赢. SG 保证当前状态的子状态的sg都已经求出. 把子状态的sg放入集合, 第一个不在集合中的数就是当前状态的sg. 这个题中, 第0行和第0列以及对角线上都是不可达的状态, 没有人会主动把棋子移动到这些位置. 所以说没有人的子状态会是这些点, 这...原创 2019-11-05 19:32:09 · 532 阅读 · 0 评论 -
GYM 100500 E IBM Chill Zone 博弈 SG
题意: 给出n个石子, 两个人轮流取, 每个人只能取连续的k个, 不能取即输, 问在最优策略时, 第一个人会赢吗? 思路: 首先很容易想到dfs暴力穷举, 枚举当前这个人取的所有方式, 如果存在一种方式使得对手先手必败, 那么就是必胜态. 枚举的方式很简单: 因为是从now个连续石子中取k个, 那么每次操作后, 会剩下两堆分离的石子堆, 他俩可能是:(0个, now-k个), (1个, now...原创 2019-05-21 17:07:18 · 247 阅读 · 0 评论 -
HDU 1848/7/6/9 SG函数入门
题意: 有三堆石子, 两个人轮流取, 最后不能取的人输, 每次取必须是斐波那契数个, 问谁会赢. 思路: 游戏信息完全公开, 游戏局面不会重现, 两个人棋形行进趋势相同, 胜负判断只依靠棋形与人无关. 所以可以用sg函数. 代码: #include<bits/stdc++.h> #define fuck(x) std::cout<<"["<<#x<...原创 2019-05-21 19:29:59 · 144 阅读 · 0 评论 -
HDU 1850 nim博弈 求第一次的选取次数
题意: n堆石子, 最后没得取的输, 问如果第一个人赢的话, 他第一次有多少种取法. 思路: 每次取任意个的话, 如果异或和!=0就能赢. 设现在能赢, x1^x2^x3^x4^x5^...^xn=k, 那么如果存在一个x1', 使得x1'^x2^x3^x4^x5^...^xn=0, 那么取x1堆就是可行的方式, 进一步地, 如果存在一个x1'=x1^k, 且x1'<x1(取了当然变少)...原创 2019-05-21 20:47:06 · 161 阅读 · 0 评论