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 ...
随机推荐
- Oracle中alter system命令参数之scope
SCOPE The SCOPE clause lets you specify when the change takes effect. Scope depends on whether you s ...
- angularJS 过滤器 表单验证
过滤器1.filter的作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果,主要用于数据的格式化.2.内置过滤器(1)Currency(货币)将一个数值格式化为货币格式,默认为$(2)D ...
- IOS中UITableViewCell的重用机制原理
创建UITableViewController子类的实例后,IDE生成的代码中有如下段落: - (UITableViewCell *)tableView:(UITableView *)tableVie ...
- IOS中线程的通信
一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 ...
- iOS 关于枚举的使用
枚举值 它是一个整形(int) 并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化. 在代码中使用枚举的目的只有一个,那就是增加代码的可读性. 使用: 枚举的定义如下: typed ...
- 打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释
为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从serv ...
- VMware下安装Ubuntu,那么必须安装VMware-tools,才能获得更好的体验,包括屏幕分辨率、声音、和windows共享剪贴板等等
在VMware下安装Ubuntu,那么必须安装VMware-tools,才能获得更好的体验,包括屏幕分辨率.声音.和windows共享剪贴板等等. 个人觉得安装vmware-tools很重要的几点: ...
- [Angular 2] Pipes with Multiple Parameters
Showing how to set up a Pipe that takes multiple updating inputs for multiple Component sources. imp ...
- Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
1.这个问题是如下的: 有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数? 分析:我们找规律 兔子对数第1个月: 1 ...
- ubuntu 连接 mssql <转>
转自 http://www.sendong.net/thread-90941-1-1.html 在linux下连接MSSQL,因为微软同志没有提供任何接口给开发人员,大约他们认为要用MSSQL的,只 ...