HDU 3537 Mock Turtles型翻硬币游戏】的更多相关文章

题目大意: 每次可以翻1个或者2个或者3个硬币,但要保证最右边的那个硬币是正面的,直到不能操作为输,这题目还有说因为主人公感情混乱可能描述不清会有重复的硬币说出,所以要去重 这是一个Mock Turtles型翻硬币游戏 下面是对这个类型游戏的讲解 约束条件6:每次可以翻动一个.二个或三个硬币.(Mock Turtles游戏) 初始编号从0开始. 当N==1时,硬币为:正,先手必胜,所以sg[0]=1. 当N==2时,硬币为:反正,先手必赢,先手操作后可能为:反反或正反,方案数为2,所以sg[1]…
题意: 给你n个硬币,你可以从中拿出来1.2.3个硬币,它们不一定要连续,你只需要保证拿出来的硬币中那个下标最大的硬币一定要是正面朝上,最后谁不能操作,谁就输了 题解: 翻硬币游戏 结论: 局面的SG 值为局面中每个正面朝上的棋子单一存在时的SG 值的异或和.即一个有k个硬币朝上,朝上硬币位置分布在的翻硬币游戏中,SG值是等于k个独立的开始时只有一个硬币朝上的翻硬币游戏的SG值异或和.比如THHTTH这个游戏中,2号.3号.6号位是朝上的,它等价于TH.TTH.TTTTTH三个游戏和,即sg[T…
题意:每次可以翻动一个.二个或三个硬币.(Mock Turtles游戏) 初始编号从0开始. 当N==1时,硬币为:正,先手必胜,所以sg[0]=1. 当N==2时,硬币为:反正,先手必赢,先手操作后可能为:反反或正反,方案数为2,所以sg[1]=2. 当N==3时,硬币为:反反正,先手必赢,先手操作后可能为:反反反.反正反.正反正.正正反,方案数为4,所以sg[2]=4. 位置x:0  1  2  3  4   5    6   7    8     9  10  11  12  13  14…
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; ]; int main() { int n; int i,ans; while(scanf("%d",&n)!=EOF) { //ans=0; memset(a,,sizeof(a)); ;i<n;i++) scanf("%d",&a[i]); sort(…
翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg=2x+1否则为2x LINK /** @Date : 2017-10-14 23:13:21 * @FileName: HDU 3537 基础翻硬币模型 向NIM转化.cpp * @Platform: Windows * @Author : Lweleth (SoungEarlf@gmail.com…
题意:给定了每个正面朝上的硬币的位置,然后每次可以翻1,2,3枚硬币,并且最右边的硬币开始必须是正面朝上的. 分析: 约束条件6:每次可以翻动一个.二个或三个硬币.(Mock Turtles游戏) 初始编号从0开始. 当N==1时,硬币为:正,先手必胜,所以sg[0]=1. 当N==2时,硬币为:反正,先手必赢,先手操作后可能为:反反或正反,方案数为2,所以sg[1]=2. 当N==3时,硬币为:反反正,先手必赢,先手操作后可能为:反反反.反正反.正反正.正正反,方案数为4,所以sg[2]=4.…
N 枚硬币排成一排,有的正面朝上,有的反面朝上.我们从左开始对硬币按1 到N 编号. 第一,游戏者根据某些约束翻硬币,但他所翻动的硬币中,最右边那个硬币的必须是从正面翻到反面. 第二,谁不能翻谁输. 有这样的结论:局面的SG 值为局面中每个正面朝上的棋子单一存在时的SG 值的异或和.即一个有k个硬币朝上,朝上硬币位置分布在的翻硬币游戏中,SG值是等于k个独立的开始时只有一个硬币朝上的翻硬币游戏的SG值异或和.比如THHTTH这个游戏中,2号.3号.6号位是朝上的,它等价于TH.TTH.TTTTT…
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 677 Accepted Submission(s): 321 Problem Description We know that Daizhenyang is chasing a girlfriend. As we all know, whenever you chase a beautiful…
翻硬币游戏,纯.. 注意要判重 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ],n; int sg(int x){ ; while(x){ ==) cnt++; x=(x>>); } ==) *tmp; else *tmp+; } int main(){ while(scanf("%d…
可以参考Thomas S. Ferguson的<Game Theory>,网上的博客大多也是根据这个翻译过来的,第五章讲了很多关于翻硬币的博弈. 这种博弈属于Mock Turtles,它的SG函数值是2x或2x+1. 把一个数写成二进制的形式,如果1的个数为奇数,把这种数叫做odious:否则就叫做evil.   话说这种名字好奇怪啊,= ̄ω ̄= 所以把每个正面朝上的硬币对应SG函数值异或起来就能得到答案. 还有这个题的坑就是:输入的数中可能有重复,所以去重后再计算! #include <…