【题目链接】 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)的更多相关文章

  1. HDU 5795 A Simple Nim(简单Nim)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  2. CodeForces 450B Jzzhu and Sequences (矩阵优化)

    CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...

  3. codeforces gym #102082C Emergency Evacuation(贪心Orz)

    题目链接: https://codeforces.com/gym/102082 题意: 在一个客车里面有$r$排座位,每排座位有$2s$个座位,中间一条走廊 有$p$个人在车内,求出所有人走出客车的最 ...

  4. Codeforces Gym100502H:Clock Pictures(KMP算法)

    http://codeforces.com/gym/100502/attachments 题意:有两个时钟上面有n个指针,给出的数字代表指针的角度.问能否在某一时刻使得两个时钟的指针重合. 思路:容易 ...

  5. Codeforces 758C:Unfair Poll(思维+模拟)

    http://codeforces.com/problemset/problem/758/C 题意:教室里有n列m排,老师上课点名从第一列第一排开始往后点,直到点到第一列第m排,就从第二列第一排开始点 ...

  6. Codeforces 639E - Bear and Paradox(二分+贪心)

    Codeforces 题目传送门 & 洛谷题目传送门 原来 jxd 作业里也有我会做的题 i 了 i 了 首先这种题目的套路就是先考虑对于一个固定的 \(c\),怎样求出得分最高的策略,而类似 ...

  7. 多重网格法简介(Multi Grid)

    原文链接 多重网格法是一种用于求解方程组的方法,可用于插值.解微分方程等. 从专业角度讲多重网格法实际上是一种多分辨率的算法,由于直接在高分辨率(用于求解的间隔小)上进行求解时对于低频部分收敛较慢,与 ...

  8. CodeForces 342A Xenia and Divisors (水题)

    题意:给定 n 个数(小于等于7),让你把它分成 m 组,每组有三个数,且满足,a < b < c,并且 a 能整除 b,b 能整除 c. 析:对于这个题,因为题目说了是不大于7的,那么一 ...

  9. Codeforces Round #316 (Div. 2) (ABC题)

    A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...

随机推荐

  1. 十个迅速提升JQuery性能的技巧

    本文提供即刻提升你的脚本性能的十个步骤.不用担心,这并不是什么高深的技巧.人人皆可运用!这些技巧包括: 使用最新版本 合并.最小化脚本 用for替代each 用ID替代class选择器 给选择器指定前 ...

  2. bzoj5091 [Lydsy1711月赛]摘苹果 概率题

    [Lydsy1711月赛]摘苹果 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 174  Solved: 135[Submit][Status][Dis ...

  3. React 入门小结

    前段时间用 Ant Design 做了一个项目,由于之前没有 React 基础,对于 ES6 也是一知半解,所以也是一边开发一边学习,好不容易把项目完成了,现在终于有时间沉下心来从头开始好好学一下 R ...

  4. jspersonft有关Table数据绑定(一)

    一:前言 在公司来就学着做报表,觉得这个报表学着还是很有意义的.jspersonft我在网上搜了一些有关的资料但是不是很多,现在就是学一点就记载一点.好记性不如烂笔头嘛! 二:在jspersonft定 ...

  5. PHP文件操作函数二

    PHP部分文件访问函数总结: 1.filetype("文件路径")  //可以输出相关文件类型,返回之为:dir/file... 2.stat("文件名") / ...

  6. 百练3383:Cell Phone Network

    传送门:http://bailian.openjudge.cn/practice/3383/ [题解] 题目就是最小支配集. 学习了最小支配集的解法: 树形dp(有空可以推一推) 贪心:DFS遍历后逆 ...

  7. 汕头市队赛 yyl杯1 T1

    A SRM 05 - YYL 杯 R1 背景 傻逼题 描述 给一个序列,序列里只有两种元素1和2.现在要从序列里选出一些非空子序列使得子序列里两种元素数量相同.问有多少种方案数? 输入格式 多组数据 ...

  8. HDU1018 (斯特林公式)

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. inno setup 5 添加快捷方式默认选中

    转载:https://www.cnblogs.com/x_wukong/p/5012412.html https://zhidao.baidu.com/question/312006120.html ...

  10. VS mfc MessageBox() 使用英文显示

    转载:http://blog.csdn.net/guoyk1990/article/details/44337249 由于特殊原因我们需要将 MessageBox 或 Dialog 的按钮“确定”.“ ...