POJ 3537】的更多相关文章

长为n的一列格子,轮流放同种棋子,率先使棋子连成3个者胜. 可以发现每次放一个棋子后,后手都不能放在[x-2,x+2]这个区间,那么相当于每次放棋将游戏分成了两个,不能放棋者败. 暴力求SG即可 /** @Date : 2017-10-14 22:50:13 * @FileName: POJ 3537 multi-sg 暴力SG.cpp * @Platform: Windows * @Author : Lweleth (SoungEarlf@gmail.com) * @Link : https:…
题意: 给1*n的格子,轮流在上面叉叉,最先画得3个连续叉叉的赢.问先手必胜还是必败. 分析: 求状态的grundy值(也就是sg值),详细怎么求详见代码.为什么这么求要自己想的,仅仅可意会(别人都说去看game theory,呵呵). 代码: //poj 3537 //sep9 #include <iostream> #include <set> using namespace std; int grundy[2048]; int h[2048]; int get_grundy(…
题目: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个格子都不能再画…
[题目链接] http://poj.org/problem?id=3537 [题目大意] 在一个1*n的方格纸上下棋,谁先连三子谁就赢了,问必胜的是谁. [题解] 我们发现对于一个n规模的游戏.在i位置下棋就能将游戏拆分为i-3和n-i-2两个游戏 对于可拆分的游戏,其sg函数为拆分后游戏sg值的异或和,因此我们用记忆化搜索来记录sg值. [代码] #include <cstdio> #include <cstring> using namespace std; int n,sg[…
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…
思路:每次画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<…
题目链接 #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-)]=; //子局面异…
传送门 我也不知道为什么枚举vis必须加上一个边界才能A 以后还是都加上吧 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; typedef long long ll; ; inline int read(){ ,f=; ;c=getchar();} +c-';c=getchar();} return x*f;…
题目链接 \(Description\) 有一个一行n列的棋盘,每个人每次往上放一个棋子,将三个棋子连在一起的人赢.问是否有必胜策略. \(Solution\) 首先一个人若在\(i\)处放棋子,那么另一个人就不能在\(i-2,i-1,i+1,i+2\)处放石子,这样会使对方赢. 那么可以看做:在\(i\)处放棋子后,另一个人不能选择\(i-2,i-1,i+1,i+2\)处放石子,不能放的人输. 可以联想到Nim游戏,一个人取一个石子,另一个人可取石子\(-2\):同时是产生两个局面 即1*n的…
                  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…