BZOJ 3106 棋盘游戏】的更多相关文章

Description 一个\(n \times n(n \le 2)\)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. B的移动规则:只能移动黑棋子.可以往上下左右四个方向之一移动一格或者两格. 和通常的"吃子"规则一样,当某游戏者把自己的棋子移动到对方棋子所在的格子时,他就赢了.两个游戏者都很聪明,当可以获胜时会尽快获胜,只能输掉的时候会尽量拖延时间.你的任务是判断谁会赢,需要多少回合. 比如\(n=2…
3106: [cqoi2013]棋盘游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 544  Solved: 233 Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l         A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. l         B的移动规则:只能移动黑棋子.可以往上下左右四个方向之一移动一格或者两格. 和通常的“吃子”规则一样,当某游戏者把…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3106 对抗搜索,f[x][y][a][b][c][d]表示当前谁走,走了几步,及位置. (因为脑残+手残+眼拙写了一坨if还瞪了好久...最后还是这种做法靠谱... #include<cstring> #include<iostream> #include<algorithm> #include<cstdio> #define maxn 109 #def…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 859  Solved: 356[Submit][Status][Discuss] Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l         A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. l         B的移动规则:只能移动黑棋子.可以往上下左右四个方向之一移动一格或者两格. 和通常的“吃子”规则一样,当某…
题面 略 BZOJ 传送门 分析 具体分析见 dalao博客 妙就妙在当i<x,j<xi<x,j<xi<x,j<x时,(i,j)(i,j)(i,j) ^ (i,x)(i,x)(i,x) ^ (i,j+x)=0(i,j+x)=0(i,j+x)=0 那么就枚举第xxx行的一半,然后就能得到第xxx整行.因为只要满足上面的结论就一定存在可行方案,所以111~(x−1)(x-1)(x−1)的每一行的选择互不影响,所以对于 i:1i:1i:1~(x−1)(x-1)(x−1)每一行…
这题有个重要性质: 我们设 Flag[i][j] 表示 (i, j) 是否被奇数个操作所覆盖, 也就是操作次数对 2 取模. 设 x = (n + 1) / 2. 那么对于所有的合法的操作方案, 令 1 <= i <= x , 1 <= j < x, 都有 Flag[i][j] ^ Flag[i][x] ^ Flag[i][j + x] = 0 令 1 <= i < x , 1 <= j <= x, 都有 Flag[i][j] ^ Flag[x][j] ^…
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1457 看了网上dalao的题解,好像解释得并不是很清楚,就按照那种思路,自己YY了一个想法,写出来居然跟std是一样的. 首先如果刚开始棋盘上有X=0或Y=0或X==Y先特判掉. 如果我们把走到(0,0)对应于将一堆石子取空,那么剩下的难点在于一般的Nim游戏是所有石子堆均被取空则游戏结束,而这里只要一堆空就结束了,这很气…… 那么我们需要考虑转换一下一堆石子被取空时对应的情景. 如果有…
SG函数 为了更一般化博弈问题,我们引入SG函数 SG函数有如下性质: 1.如果某个状态SG函数值为0,则它后继的每个状态SG函数值都不为0 2.如果某个状态SG函数值不为0,则它至少存在一个后继的状态SG函数值为0 如果某个局面SG函数值为0,则该局面先手必败 放到有向图中,该有向图的核就是SG值为0的点构成的集合 游戏的和 游戏的和的SG函数值=所有子游戏SG函数值的异或和Xor 如果所有子游戏都进行完毕,那么Xor=0,必败 如果某个状态的SG函数值为0,那么后手一定可以做出一种动作,保持…
3106: [cqoi2013]棋盘游戏 链接 分析: 极大极小搜索 + 记忆化. 代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int INF = 1e9; ][][][][][]; ] = {,,,-,,,,-}; ] = {,-,,,,-,,}; int n; int Minimax(int player,int step,int a,int b,int c,int d) { ) r…
http://www.lydsy.com/JudgeOnline/problem.php?id=3106 白棋如果第一步不能赢,那么一定输 因为可以黑棋走的距离比白棋大,黑棋可以下一步吃掉白棋,也可以下一步离开白棋的吃子范围 n才20,我们可以dfs搜索所有的局面求黑棋取胜的回合数 记录当前状态到游戏结束的回合数 如果现在白棋走,那它要尽可能的拖延时间,所以就是所有的后继状态取大 如果现在黑棋走,那它要尽快的取胜,所以就是所有的后继状态取小 边界是当两个棋子到同一位置时,根据前面的分析,应该必须…