poj3537--Crosses and Crosses】的更多相关文章

Crosses and Crosses Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2237 Accepted: 821 Case Time Limit: 2000MS Description The game of Crosses and Crosses is played on the field of 1 × n cells. Two players make moves in turn. Each move the…
Crosses and Crosses Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 3063   Accepted: 1196 Case Time Limit: 2000MS Description The game of Crosses and Crosses is played on the field of 1 × n cells. Two players make moves in turn. Each mov…
                  Crosses and Crosses Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4049   Accepted: 1586 Case Time Limit: 2000MS Description The game of Crosses and Crosses is played on the field of 1 × n cells. Two players make moves…
poj.org/problem?id=3537 (题目链接) 题意 给出一个1*n的棋盘,每次可以选择一个没被标记过的点打标记,若经过某一步操作使得出现3个连续的标记,则最后操作的人获胜.问是否存在先手必胜策略. Solution 我们可以很快发现,若给x位置打上标记,那么棋盘就被分成了2份,分别是x-3以及n-x-2,于是${sg[n]=mex\{sg[x-3]~XOR~sg[n-x-2]}\}$,1<=x<=n.因为n<=2000,直接暴力求解sg函数即可. 代码 // poj353…
大意: 给定一个\(1 * n\)的棋盘,你和对手轮流在上面画"X" 当出现三个连续的X时,最后一步操作的人胜利 不难发现,在棋盘中画了一个X之后 问题等价于两个一样的子游戏 然后暴力求\(sg\)函数即可 复杂度\(O(n^2)\) #include <bitset> #include <cstdio> #include <cstring> #include <iostream> using namespace std; #define…
题目描述 题解: 一道非常简单的$SG$函数应用. 对于一个长度求它的$SG$函数,然后判断是否为$0$即可. 代码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int n,sg[N]; int dfs(int x) { ); if(~sg[x])return sg[x]; }; ;i<=x;i++) tmp[dfs(i-)^dfs(x-i-)]=;…
题目:http://poj.org/problem?id=3537 题意:给你n个格子,两个人依次在n个格子的任意空位置画"X",谁如果画了一个后,3个X连在了一起,那么那个人就获胜了.问是先手胜还是后手胜 分析: 胜利的上一个状态肯定是_XX_或者_X_X_,又因为每个人都是聪明的,也就是说如果一个人在i位置画了一个X,那么另一个人就不能在[x-2,x+2]这段区间里面画X,因为如果在这里画了个X,那么另一个人下一手就能连成三个X. 也就是说每次画个X,以它为中心的5个格子都不能再画…
思路:每次画X之后都会形成2个子游戏,即i-3和n-i-2. 代码如下: #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<vector> #include<cstring> using namespace std; ]; int getsg(int n) { ) ; ) return sg[n]; ]={}; ;i<…
博弈论 相当于放了x的位置,左右4格都不能再放x了,谁无处可放就输. n<=2000 直接枚举后继状态,暴力求SG函数即可. 例: 0000000->x..0000 / .x..000 / ..x..00 / 0..x..0 / 00..x.. 记忆化搜索写挂了……还是顺序DP靠谱= =(跟S-Nim类似的写法,暴力求SG函数) Source Code Problem: User: sdfzyhy Memory: 692K Time: 141MS Language: G++ Result: A…
题目链接 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ]; int get_sg(int n) { ) ; ) return sg[n]; ]; //莫名其妙! //vis[]数组要声明在函数里,如果放外面会WA memset(vis,,sizeof(vis)); ;i<=n;i++) vis[get_sg(n-i-)^get_sg(i-)]=; //子局面异…