Codeforces 138D World of Darkraft
有一个n*m 的棋盘,每个点上标记了L,R,X 中的一个
每次能选择一个没有被攻击过的点(i,j),从这个点开始
发射线,射线形状为:
1. 若字符是 L,向左下角和右上角发,遇到被攻击过的点
就停下来
2. 若字符是 R,向左上角和右下角发,遇到被攻击过的点
就停下来
3. 若字符是 X,向左小左上右下右上发,遇到被攻击过的
点停下来
问先手是否必胜,n,m<=20
先将棋盘黑白染色,再旋转45°,黑的和白的各为一个组合游戏。
然后设sg[a][b][c][d]表示横坐标在[a,b],纵坐标在[c,d]里这个局面的sg值。
复杂度O(n6)
code:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 22
using namespace std;
char ch,s[maxn][maxn];
int n,m,N,sg[maxn][maxn][maxn][maxn],op[maxn][maxn];
bool ok,bo[];
void read(int &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
int calc(int a,int b,int c,int d){
if (a>b||c>d) return ;
if (sg[a][b][c][d]!=-) return sg[a][b][c][d];
for (int i=a;i<=b;i++)
for (int j=c;j<=d;j++)
if (op[i][j]==) calc(a,b,c,j-),calc(a,b,j+,d);
else if (op[i][j]==) calc(a,i-,c,d),calc(i+,b,c,d);
else if (op[i][j]==) calc(a,i-,c,j-),calc(a,i-,j+,d),calc(i+,b,c,j-),calc(i+,b,j+,d);
for (int i=a;i<=b;i++)
for (int j=c;j<=d;j++)
if (op[i][j]==) bo[calc(a,b,c,j-)^calc(a,b,j+,d)]=;
else if (op[i][j]==) bo[calc(a,i-,c,d)^calc(i+,b,c,d)]=;
else if (op[i][j]==) bo[calc(a,i-,c,j-)^calc(a,i-,j+,d)^calc(i+,b,c,j-)^calc(i+,b,j+,d)]=;
for (int i=;;i++) if (!bo[i]){sg[a][b][c][d]=i;break;}
for (int i=a;i<=b;i++)
for (int j=c;j<=d;j++)
if (op[i][j]==) bo[calc(a,b,c,j-)^calc(a,b,j+,d)]=;
else if (op[i][j]==) bo[calc(a,i-,c,d)^calc(i+,b,c,d)]=;
else if (op[i][j]==) bo[calc(a,i-,c,j-)^calc(a,i-,j+,d)^calc(i+,b,c,j-)^calc(i+,b,j+,d)]=;
return sg[a][b][c][d];
}
int solve(int p){
memset(op,,sizeof(op));
memset(sg,-,sizeof(sg));
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (((i+j)&)==p) op[(i-j+m+)>>][(i+j)>>]=s[i][j]=='L'?:s[i][j]=='R'?:;
return calc(,N,,N);
}
int main(){
read(n),read(m),N=(n+m)>>;
for (int i=;i<=n;i++) scanf("%s",s[i]+);
puts(solve()^solve()?"WIN":"LOSE");
return ;
}
Codeforces 138D World of Darkraft的更多相关文章
- Codeforces 138D World of Darkraft(Multi-Nim)
[题目链接] http://codeforces.com/problemset/problem/138/D [题目大意] H*W的棋盘中每个点都是L.R.X三者之一,两人轮流选一个点, 若为L则向左下 ...
- World of Darkraft(codeforces 138D)
题意:有一个 n × m 的棋盘,每个点上标记了 L; R; X 中的一个 每次能选择一个没有被攻击过的点 (i; j),从这个点开始发射线,射线形状为: 1. 若字符是 L,向左下角和右上角发,遇到 ...
- Codeforces 1321E World of Darkraft: Battle for Azathoth
题意 有\(n\)个武器,第\(i\)个武器攻击力为\(a_i\),价值\(ca_i\). 有\(m\)个防具,第\(i\)个防具防御力为\(b_i\),价值\(cb_i\). 有\(p\)个怪,第\ ...
- 2018省赛赛第一次训练题解和ac代码
第一次就去拉了点思维很神奇的CF题目 2018省赛赛第一次训练 # Origin Title A CodeForces 607A Chain Reaction B CodeForces ...
- 【Codeforces 464D】World of Darkraft - 2
Codeforces 464 D 首先我们知道这K个装备是互不干扰的,就是说如果一个装备升级了或者卖掉了,不会对其它装备的挣到的钱产生任何影响.所以我们就考虑单独处理某一个装备挣到的钱. 那么就设\( ...
- Codeforces 464D-World of Darkraft - 2
题意 有 \(n\) 个怪兽,\(k\) 种装备.最开始每个装备的等级都是 1 .每打完一个怪兽就会随机掉落一个装备. 随机的方式是,先等概率随机一个装备种类,设当前这个装备的等级为 \(t\) ,那 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
随机推荐
- Eucalyptus安装包的功能列表
aoetools 是一个用来在以太网上运行 ATA 存储协议的软件,相当于一个网络存储功能.euca2ools eucalpytus客户端杜昂管理工具axis2c SOAP引擎,同 ...
- pygame学习资料
pygame下载地址: https://bitbucket.org/pygame/pygame/downloads 12岁的少年教你用Python做小游戏 Beginning Game Program ...
- 核心业务系统数据库平台迁移: Oracle -> MySQL
为了对核心技术拥有更多的自主控制能力,为了解决数据库的线性扩展问题,为了尽量减少对商业软件的依赖,为了摆脱对高端硬件的依赖,为了… 基于以上多种原因,2年前,我们计划将公司某核心应用平台进行大手术:数 ...
- JavaScript之作用域与作用域链
今天是2016的第一天,我们得扬帆起航踏上新的征程了.此篇阐述JavaScript中很重要的几个概念:作用域与作用域链及相关知识点. 我们先从变量与作用域的行为关系开始讨论. 变量作用域 JavaSc ...
- angularJs $injector
一 angularJS中几种注入方式 Spring中使用构造注入或者设值注入的方式,还需要做一些额外的操作,但是angular中只需要在需要的地方声明一下即可,类似模块的引用,因此十分方便. angu ...
- python urllib2详解及实例
urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件.他以urlopen函数的形式提供了一个非常简单的接口, 这是具有利用不同协议获取URLs的能 ...
- Android 4.4(KitKat)中VSync信号的虚拟化
原文地址:http://blog.csdn.net/jinzhuojun/article/details/17293325 Android 4.1(Jelly Bean)引入了Vsync(Vertic ...
- c# MongoDB插入和批量插入,插入原理
在开发之前,选择MongoDb驱动是件很重要的事情.如果选择不好,在后期的开发的是件很费力的事情,因为我就遇到这样的问题.MongoDb驱动有几种比较流行驱动,官方驱动和samus是两种使用比较多的. ...
- jQuery Ajax 实例 具体介绍$.ajax、$.post、$.get的使用
Jquery在异步提交方面封装的非常好.直接用AJAX非常麻烦须要处理浏览器之间的兼容问题,Jquery大大简化了我们的这些操作操作.不用在考虑浏览器这方面的问题,能够直接使用! $.post.$.g ...
- intent和intentfilter
intent 和intent Filters startActivity()的机制 用到了IBinder ipc 用到了进程间通讯机制 activity有四种LaunchMode 当startActi ...