题目链接 #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-)]=; //子局面异…
阅读理解两小时,手敲暴力思考5分钟.然后\(n^3\)就A了 暴力代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register i…
题目:在1*n 的棋盘里面,A和B都在里面画叉 , 如果谁可以画了一个叉后,可以连成3个叉,那谁胜利 : 分析: 首先考虑如果我在玩游戏,我最希望对手可以画出-x-x or  -xx-   ,  这种情况 ,也就是说玩家就一定不可画成这样给对手制造机会 :  那可以当成画了一个叉后 就分成了 (x-3) , (x-2-i)  ,两个游戏 ,那我们可以根据SG的性质来解决这种分解游戏的游戏 #include<stdio.h> #include<string.h> //注意 S数组要按…
题意: 给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个格子都不能再画…
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的位置,左右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…
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…
思路:每次画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<…