hdu 4664 划线(SG)】的更多相关文章

N个平面,每个平面有ni个点 两个人玩游戏,划线,他们可以划任意一个平面的两个点,有以下要求:两个人划得线不能交叉,不要划已经划过的线,如果一个平面被划了一个空心的三角形,那么这个平面就不能继续划线了.Carol先来,两个人轮着画,谁没线划了就输了,问你最后谁赢. 一个平面上连接点时,不能连接已经有边的顶点,因为对方只需要再连接一次就可以组成一个三角形了 SG[i] i表示剩余没连线的点 0,1个点都是先手必败 SG=0 2,3个点先手必胜 SG[2] = 1 SG[3] = 1 假如 一个平面…
S-Nim HDU 1536 博弈 sg函数 题意 首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之后m行,每行输入一个n表示有n个堆,每堆有n1个石子,问这一行所表示的状态是赢还是输,如果赢输入W否则L. 解题思路 如果没有每次取石子个数的限制的话,那么仅仅需要把每堆石子的个数进行异或运算即可,如果结果不是1,那么先手赢,反之后手赢. 但是这里对每次取石子的个数进行了限制,每次只能从几个数中进行…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664 题意:给出一个n个点的凸包(不存在三点共线).每次可以选择两个点连线,但是任意两条线只能在顶点处相交.若某一方连完线先后出现一个三角形,则该方为胜者,游戏结束.现在有若干个这样的凸包,每次双方可选择任意一个凸包连线.但是某个凸包一旦被连成一个三角形,则不能在该凸包上连线. 思路:因为若一条线的两个端点之一已经有一条线通过,则该条线连完之后必输.因此一个凸包连一条线就是将这个凸包分成两部分,因此…
HDU 1404  Digital Deletions 一串由0~9组成的数字,可以进行两个操作:1.把其中一个数变为比它小的数:2.把其中一个数字0及其右边的所以数字删除. 两人轮流进行操作,最后把所以数字删除的人获胜,问前者胜还是后者胜. 字符串长度为1-6,前者胜输出Yes,否则输出No. #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1)=1;F(2)=2;F(n)=F(n-1)+F(n-2)(n>=3);所以,1,2,3,5,8,13……就是菲波那契数列.在HDOJ上有不少相关的题目,比如1005 Fibonacci again就是曾经的浙江省赛题.今天,又一个关于Fibonacc…
http://acm.hdu.edu.cn/showproblem.php?pid=4678 自己太蠢...没学SG...还是浩神指点我SG精髓以后才A的这题...(第一题SG 这里子游戏之间没有影响所以只要找规律得出所有子游戏的SG值 然后求XOR就行了 这里题面太复杂 但看懂以后其实可以转换成取石子游戏: 给你N堆石子 , 每次只能取一个或者整堆取走 谁先取完谁胜 每堆石子的数量就是空白部分附近所有连接数字的数量+1(空白本身算一个石子) 孤立的单个数字也组成一堆 那么根据找规律可得: 奇数…
Chess Problem Description   Alice and Bob are playing a special chess game on an n × 20 chessboard. There are several chesses on the chessboard. They can move one chess in one turn. If there are no other chesses on the right adjacent block of the mov…
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…
题意: 给定n个平面(平面之间相互独立),每个平面上有一些点,并且构成凸集,C和D轮流选一个平面连接两个点画线段,并保证线段之间除了端点之外没有其它交点,当平面上出现一个完整的三角形之后此平面就不能继续画线.最早无法画线的人输.输出赢的人. 解法: 因为n个平面是独立的,所以sg函数满足异或的关系.对于每一个平面,求sg值.对于n个点,连上一条线可以分成 i 和 n-2-i 两个独立的部分.所以该点的子状态为sg[i]^sg[n-i-2](0<=i<=n-2).然后可以计算该点的sg值.打表发…
看到这题时,当时还不会做,也没搞懂sg函数,于是狠狠的钻研了下博弈论,渐渐的知道了sg函数…… 现在在来做这题就很容易了,1A 打表容易发现在80左右的时候就出现循环节了 代码如下: #include<stdio.h> #include<cstring> #define in(x) scanf("%d",&x) ]; ]; int getsg(int x) { ) return sg[x]; memset(vis,,sizeof(vis)); ;i<…