Codeforces 138D World of Darkraft(Multi-Nim)
【题目链接】 http://codeforces.com/problemset/problem/138/D
【题目大意】
H*W的棋盘中每个点都是L、R、X三者之一,两人轮流选一个点,
若为L则向左下和右上发射激光,R向右下和左上发射,
X则相当于LR的组合——同时向四个方向发射。激光所至的点会被摧毁,
只有已摧毁的点或棋盘边界才会挡住激光。
若在某回合开始时所有点都被摧毁,则该人失败。问先手是否有必胜策略?
【题解】
我们根据激光将棋盘切成不同的不同的部分,
将几个子游戏的sg异或起来作为整个游戏的sg值,
以为激光是斜着切的所以我们把棋盘转一转方便处理,
此外棋盘的奇偶格子是互不干扰的因此我们分开计算其sg值并异或起来判断答案
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char mp[30][30];
int sg[50][50][50][50][2],n,m;
int SG(int x1,int x2,int y1,int y2,int k){
int &ret=sg[x1][x2][y1][y2][k];
if(ret!=-1)return ret;
char s[60]={0};
for(int y=0;y<n;y++){
for(int x=0;x<m;x++){
if(((x+y)&1)==k){
int _x=y+x,_y=y-x+m;
if(x1<=_x&&_x<x2&&y1<=_y&&_y<y2){
char c=mp[y][x];
int g=0;
if(c=='L')g=SG(x1,_x,y1,y2,k)^SG(_x+1,x2,y1,y2,k);
if(c=='R')g=SG(x1,x2,y1,_y,k)^SG(x1,x2,_y+1,y2,k);
if(c=='X'){
g=SG(x1,_x,y1,_y,k);
g^=SG(x1,_x,_y+1,y2,k);
g^=SG(_x+1,x2,y1,_y,k);
g^=SG(_x+1,x2,_y+1,y2,k);
}s[g]=1;
}
}
}
}while(s[++ret]);
return ret;
}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=0;i<n;i++)scanf("%s",mp[i]);
memset(sg,-1,sizeof(sg));
puts(SG(0,n+m,0,n+m,0)^SG(0,n+m,0,n+m,1)?"WIN":"LOSE");
}return 0;
}
Codeforces 138D World of Darkraft(Multi-Nim)的更多相关文章
- HDU 5795 A Simple Nim(简单Nim)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- CodeForces 450B Jzzhu and Sequences (矩阵优化)
CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...
- codeforces gym #102082C Emergency Evacuation(贪心Orz)
题目链接: https://codeforces.com/gym/102082 题意: 在一个客车里面有$r$排座位,每排座位有$2s$个座位,中间一条走廊 有$p$个人在车内,求出所有人走出客车的最 ...
- Codeforces Gym100502H:Clock Pictures(KMP算法)
http://codeforces.com/gym/100502/attachments 题意:有两个时钟上面有n个指针,给出的数字代表指针的角度.问能否在某一时刻使得两个时钟的指针重合. 思路:容易 ...
- Codeforces 758C:Unfair Poll(思维+模拟)
http://codeforces.com/problemset/problem/758/C 题意:教室里有n列m排,老师上课点名从第一列第一排开始往后点,直到点到第一列第m排,就从第二列第一排开始点 ...
- Codeforces 639E - Bear and Paradox(二分+贪心)
Codeforces 题目传送门 & 洛谷题目传送门 原来 jxd 作业里也有我会做的题 i 了 i 了 首先这种题目的套路就是先考虑对于一个固定的 \(c\),怎样求出得分最高的策略,而类似 ...
- 多重网格法简介(Multi Grid)
原文链接 多重网格法是一种用于求解方程组的方法,可用于插值.解微分方程等. 从专业角度讲多重网格法实际上是一种多分辨率的算法,由于直接在高分辨率(用于求解的间隔小)上进行求解时对于低频部分收敛较慢,与 ...
- CodeForces 342A Xenia and Divisors (水题)
题意:给定 n 个数(小于等于7),让你把它分成 m 组,每组有三个数,且满足,a < b < c,并且 a 能整除 b,b 能整除 c. 析:对于这个题,因为题目说了是不大于7的,那么一 ...
- Codeforces Round #316 (Div. 2) (ABC题)
A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...
随机推荐
- jocky1.0.3 (原joc) java混淆器 去除jdk版本限制
昨晚下班回去,研究了下jocky1.0.3的使用,发现编译时提示引用类库版本不对,捣弄了半个小时后终于理解,原来是我的jdk1.7版本过高,这货是06年的版本,到现在都没更新过,支持(限制)的最高版本 ...
- spring事务不回滚 自己抛的异常
在service代码中 throw new Excepion("自定义异常“) 发现没有回滚, 然后百度了下, 改为抛出运行时异常 throw new RuntimeException ...
- 把java的class文件打成jar包的步骤
现在我的文件夹的目录在: C:\Users\linsenq\Desktop\cglibjar 我要把位于这个目录下的所有文件夹以及这个文件夹下的.class文件打成jar包 第一步:用win+R 打开 ...
- bzoj 1110 [POI2007]砝码Odw 贪心+进制转化
[POI2007]砝码Odw Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 661 Solved: 366[Submit][Status][Disc ...
- bzoj 5099 [POI2018]Pionek 计算几何 极角排序
[POI2018]Pionek Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 269 Solved: 80[Submit][Status][Disc ...
- Create a conditional DNS forwarder on our domain.com to Amazon default DNS provider
Backgroup: I have an AWS Managed Active Directory(domain.com). I created a DHCP options set to my d ...
- 动态规划:高维DP
例子当然是王八棋这道题,这道题以前是写烂了 先来一个大暴力,zlw教的暴力~~ #include<iostream> using namespace std; ,maxm=; ]; int ...
- [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树
题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...
- node导入导出的问题
node的每一个文件,都是一个域,那么里面所有的变量都不允许被外界引用,除非导出去.要使用外界的变量,也必须使用导入的方式导入进来. import 变量名 from '文件地址'//css可以直接导入 ...
- C# 文件类的操作---获取
如何获取指定目录包含的文件和子目录 . DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找: . DirectoryIn ...