UVA10561 Treblecross —— SG博弈】的更多相关文章

题目链接:https://vjudge.net/problem/UVA-10561 题意: 两个人玩游戏,轮流操作:每次往里面添加一个X,第一个得到XXX的获胜. 题解: 详情请看<训练指南>P139,以及代码注释. 代码如下: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include…
题目链接:https://vjudge.net/problem/UVA-12293 题意: 两人玩游戏,有两个盒子,开始时第一个盒子装了n个球, 第二个盒子装了一个球.每次操作都将刷量少的盒子的球倒掉,然后再从数量多的盒子中拿出若干个球放到空盒子里,最终状态为(1,1),达到这个状态的玩家获胜. 题解: 1.由于每次都是倒掉数量少的那个盒子,再对数量多的盒子进行分割,所以可以把规则简化为:初始时有n个球,每次只能拿走不多于n/2的球,最终状态为1个球,达到这个状态的玩家获胜. 2.简化游戏规则之…
题目链接:https://vjudge.net/problem/UVA-1482 题意: 有n堆石子, 每堆石子有ai(ai<=1e18).两个人轮流取石子,要求每次只能从一堆石子中抽取不多于一半的石子,最后不能取的为输家. 题解: 典型的SG博弈,由于ai的范围很大,所以不能直接求SG值,那么就打表SG值找规律,如下: 发现,当x为偶数时, SG[x] = x/2; 当x为奇数时, SG[x] = SG[x/2],即如下: 代码如下: #include <iostream> #incl…
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6253    Accepted Submission(s): 2603 Problem Description 不论什么一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(…
Treblecross is a two player gamewhere the goal is to get three X in a row on a one-dimensional board. At the startof the game all cells in the board is empty. In each turn a player puts a X in an empty cell, and if that results in there beingthree X…
UVA 10561 - Treblecross 题目链接 题意:给定一个串,上面有'X'和'.',能够在'.'的位置放X.谁先放出3个'X'就赢了,求先手必胜的策略 思路:SG函数,每一个串要是上面有一个X,周围的4个位置就是禁区了(放下去必败).所以能够以X分为几个子游戏去求SG函数的异或和进行推断.至于求策略.就是枚举每一个位置就能够了 代码: #include <stdio.h> #include <string.h> #include <algorithm> u…
Treblecross is a two player game where the goal is to get three `X' in a row on a one-dimensional board.At the start of the game all cells in the board is empty. In each turn a player puts a `X' in an emptycell, and if that results in there being thr…
A Simple Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Total Submission(s): 1487    Accepted Submission(s): 939 Problem Description Agrael likes play a simple game with his friend Animal during the classes. I…
S-Nim Problem Description   Arthur and his sister Caroll have been playing a game called Nim for some time now. Nim is played as follows: The starting position has a number of heaps, all containing some, not necessarily equal, number of beads. The pl…
http://poj.org/problem?id=3710 (说实话对于Tarjan算法在搞图论的时候就没搞太懂,以后得找时间深入了解) (以下有关无向图删边游戏的资料来自论文贾志豪<组合游戏略述--浅谈SG游戏的若干拓展及变形>) 首先,对于无向图的删边游戏有如下定理性质: 1.(Fushion Principle定理)我们可对无向图做如下改动:将图中的任意一个偶环缩成一个新点,任意一个奇环缩成一个新点加一个新边:所有连到原先环上的边全部改为与新点相连:这样的改动不影响图的SG值. 2.(…
描述 Bessie is playing a number game against Farmer John, and she wants you to help her achieve victory. Game i starts with an integer N_i (1 <= N_i <= 1,000,000). Bessie goes first, and then the two players alternate turns. On each turn, a player can…
题意:给定上一行字符串,其中只有 X 和 . 并且没有连续的三个 X,两个玩家要分别在 . 上放 X,如果出现三个连续的 X,则该玩家胜利,现在问你先手胜还是败,如果是胜则输出第一步可能的位置. 析:首先,如果输入中出现了 XX 或者 X.X,那么先手必胜,这种可以先处理,然后考虑剩下的,首先每个玩家肯定不能放X-1,X-2,X+1,X+2的位置,其中 X 表示格子X中已经是 X 了,因为一放上,那么下一个玩家就一定能胜利,除非没有其他地方可以放了,那么游戏也就可以终止了,然后除了这些地方,那么…
A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3832    Accepted Submission(s): 2183 Problem Description Stan and Ollie play the game of multiplication by multiplying an in…
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8380    Accepted Submission(s): 3462 Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1)=1;F(2)=2;…
题目:在1*n 的棋盘里面,A和B都在里面画叉 , 如果谁可以画了一个叉后,可以连成3个叉,那谁胜利 : 分析: 首先考虑如果我在玩游戏,我最希望对手可以画出-x-x or  -xx-   ,  这种情况 ,也就是说玩家就一定不可画成这样给对手制造机会 :  那可以当成画了一个叉后 就分成了 (x-3) , (x-2-i)  ,两个游戏 ,那我们可以根据SG的性质来解决这种分解游戏的游戏 #include<stdio.h> #include<string.h> //注意 S数组要按…
题意:David 玩一个石子游戏. 游戏中,有n堆石子,被编号为0..n-1.两名玩家轮流取石子. 每一轮游戏.每名玩家选取3堆石子i,j,k(i<j,j<=k,且至少有一枚石子在第i堆石子中). 从i中取出一枚石子,并向j.k中各放入一枚石子(假设j=k则向k中放入2颗石子). 最 先不能取石子的人输. 石子堆的个数不会超过23.每一堆石子不超过1000个. 解法:看上去是将石子都往右移,直到全部都到了n-1堆不能移为止. 首先是考虑每堆石子事实上是独立的一个子游戏,堆与堆之间不相互影响.…
题目链接:https://vjudge.net/problem/UVA-1378 题意: 两个人玩游戏,有n堆石子,两人轮流操作:于第i堆石子中取走一块石子,然后再往第j.k堆中各添加一块石子.其中 i<j, j<=k.最后一次操作的为赢家,问先手能否必胜,如果能,请输出第一步操作. 题解: 1.把每个石子都看成是一个子游戏,所以在第i堆的其中一个石子,它的下一步为第j堆和第k堆:即这个子游戏又可以分解为两个子游戏. 2.由于在同一堆里的石子状态完全相同,所以当这堆石子的个数为偶数时,他们的S…
下面这两个模版应该就比较严密了,这个里边的f[]是从零开始的. 转载出处:转自:http://blog.csdn.net/primoblog/article/details/13376057 1.sg打表 //f[]:可以取走的石子个数 //sg[]:0~n的SG函数值 //hash[]:mex{} int f[K],sg[N],hash[N]; void getSG(int n) { memset(sg,,sizeof(sg)); ; i<=n; i++) { memset(hash,,siz…
http://acm.hdu.edu.cn/showproblem.php?pid=4678 自己太蠢...没学SG...还是浩神指点我SG精髓以后才A的这题...(第一题SG 这里子游戏之间没有影响所以只要找规律得出所有子游戏的SG值 然后求XOR就行了 这里题面太复杂 但看懂以后其实可以转换成取石子游戏: 给你N堆石子 , 每次只能取一个或者整堆取走 谁先取完谁胜 每堆石子的数量就是空白部分附近所有连接数字的数量+1(空白本身算一个石子) 孤立的单个数字也组成一堆 那么根据找规律可得: 奇数…
Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理学专家.根据要求,我校也有一个奔赴灾区救灾的名额,由于广大师生报名踊跃,学校不得不进行选拔来决定最后的人选.经过多轮的考核,形势逐渐明朗,最后的名额将在"林队"和"徐队"之间产生.但是很巧合,2个人的简历几乎一模一样,这让主持选拔的8600很是为难.无奈,他决定通过捐款…
SG函数: 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Games的抽象模型.也就是说,任何一个ICG都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”.下 面我们就在有向无环图的顶点上定义Sprague-Garundy函数.首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最…
算法笔记 参考资料:https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html sg函数大神详解:http://blog.csdn.net/luomingjun12315/article/details/45555495 sg[i]定义,从i走一步能到达的j的sg[j]以外的最小值,那么从sg函数值为x的状态出发,我们能转移到sg值为0,1,...,x-1的状态 对于某个人来说,0是他的必败态,sg[0] = 0 我们从这个状态出发,用d…
Mine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 51    Accepted Submission(s): 6 Problem Description Have you ever played a game in Windows: Mine?This game is played on a n*m board, just lik…
题意:一个无向有环的图,从 1 号结点起火,开始蔓延,两个绝顶聪明的人轮流走,谁不能走谁输,输出输的人: 分析: 当时知道是博弈,但是想当然的以为 1 号结点有一个奇数层,就必胜:其实不是这样的,当一个人往奇数层走的时候,来到分叉点,另一个会找一个偶数走. 于是,还是得用SG博弈, 1.将图转换为一个有向无环图: 2.SG函数,下一个状态是子节点: #include <bits/stdc++.h> using namespace std; int n,m; + ; vector<int&…
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 首先当然要献上一些非常好的学习资料: 基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_cxlove/article/details/7854534 经典的删边游戏小结:http://blog.csdn…
A String Game   Problem code: ASTRGAME   Submit All Submissions   All submissions for this problem are available. Teddy and Tracy like to play a game based on strings. The game is as follows. Initially, Tracy writes a long random string on a whiteboa…
http://www.lydsy.com/JudgeOnline/problem.php?id=2940 SG 博弈入门推荐张一飞的<由感性认识到理性认识 ——透析一类搏弈游戏的解答过程> #include<cstdio> #include<cstring> using namespace std; int a,b,c; ]; int Sg(int n) { ) return sg[n]; ]={}; ;i+a-<=n;++i) vis[Sg(i-)^Sg(n-i…
Luogu P1290 欧几里得的游戏/UVA10368 Euclid's Game 对于博弈论的题目没接触过多少,而这道又是比较经典的SG博弈,所以就只能自己来推关系-- 假设我们有两个数$m,n$,我们先把$m$设为较大值,$n$设为较小值.现在我们把它分成三种情况: 1.若两数为倍数关系,当前操作的一方赢. 2.若$m \div n>1$,那么还是操作一方赢. 为什么呢? 拿$(25,7)$来举例.这时的操作方就有三种选择:$(8,7)$,$(11,7)$,$(4,7)$, 如果他选$(1…
基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_cxlove/article/details/7854534 经典的删边游戏小结:http://blog.csdn.net/acm_cxlove/article/details/7854532 五篇国家集训队论文: 张一飞: <由感性认识到理性认识——透析一类搏弈游戏的解答过程 > 王晓珂:<…
Treblecross is a two player game where the goal is to get three X in a row on a one-dimensional board. At the start of the game all cells in the board are empty. In each turn a player puts an X in an empty cell, and if the move results three X next t…