World of Darkraft(codeforces 138D)
题意:有一个 n × m 的棋盘,每个点上标记了 L; R; X 中的一个
每次能选择一个没有被攻击过的点 (i; j),从这个点开始发射线,射线形状为:
1. 若字符是 L,向左下角和右上角发,遇到被攻击过的点就停下来
2. 若字符是 R,向左上角和右下角发,遇到被攻击过的点就停下来
3. 若字符是 X,向左小左上右下右上发,遇到被攻击过的点停下来
问先手是否必胜, n; m ≤ 20
/*
首先可以根据激光的性质,把图进行奇偶划分,然后就变成了两个子问题。
当出现一道激光时,这个游戏就变成了2个或4个完全等价的游戏,可以根据这个特点设计SG函数。
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#define N 50
using namespace std;
int n,m,dp[N][N][N][N][];
char map[N][N];
int dfs(int min_x,int max_x,int min_y,int max_y,int op){
int ret=dp[min_x][max_x][min_y][max_y][op];
if(ret!=-) return ret;
char s[N]={};
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if((i+j&)==op){
int x=i+j,y=i-j+m;
if(x>=min_x&&x<max_x&&y>=min_y&&y<max_y){
int g=;
if(map[i][j]=='L')
g=dfs(min_x,x,min_y,max_y,op)^dfs(x+,max_x,min_y,max_y,op);
if(map[i][j]=='R')
g=dfs(min_x,max_x,min_y,y,op)^dfs(min_x,max_x,y+,max_y,op);
if(map[i][j]=='X')
g=dfs(min_x,x,min_y,y,op)^dfs(min_x,x,y+,max_y,op)
^dfs(x+,max_x,min_y,y,op)^dfs(x+,max_x,y+,max_y,op);
s[g]=;
}
}
while(s[++ret]);
dp[min_x][max_x][min_y][max_y][op]=ret;
return ret;
}
int main(){
memset(dp,-,sizeof(dp));
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) scanf("%s",map[i]);
int t=dfs(,n+m,,n+m,)^dfs(,n+m,,n+m,);
if(t) printf("WIN");
else printf("LOSE");
return ;
}
World of Darkraft(codeforces 138D)的更多相关文章
- (CodeForces - 5C)Longest Regular Bracket Sequence(dp+栈)(最长连续括号模板)
(CodeForces - 5C)Longest Regular Bracket Sequence time limit per test:2 seconds memory limit per tes ...
- Sorted Adjacent Differences(CodeForces - 1339B)【思维+贪心】
B - Sorted Adjacent Differences(CodeForces - 1339B) 题目链接 算法 思维+贪心 时间复杂度O(nlogn) 1.这道题的题意主要就是让你对一个数组进 ...
- (CodeForces 558C) CodeForces 558C
题目链接:http://codeforces.com/problemset/problem/558/C 题意:给出n个数,让你通过下面两种操作,把它们转换为同一个数.求最少的操作数. 1.ai = a ...
- [题解]Yet Another Subarray Problem-DP 、思维(codeforces 1197D)
题目链接:https://codeforces.com/problemset/problem/1197/D 题意: 给你一个序列,求一个子序列 a[l]~a[r] 使得该子序列的 sum(l,r)-k ...
- 【Codeforces】【图论】【数量】【哈密顿路径】Fake bullions (CodeForces - 804F)
题意 有n个黑帮(gang),每个黑帮有siz[i]个人,黑帮与黑帮之间有有向边,并形成了一个竞赛完全图(即去除方向后正好为一个无向完全图).在很多年前,有一些人参与了一次大型抢劫,参与抢劫的人都获得 ...
- Maximum Sum of Digits(CodeForces 1060B)
Description You are given a positive integer nn. Let S(x) be sum of digits in base 10 representation ...
- 【日常训练】Help Victoria the Wise(Codeforces 99C)
题意与分析 这题意思是这样的:在正方体的六面镶嵌给定颜色的宝石(相同颜色不区分),然后问最多有几种彼此不等价(即各种旋转过后看起来一致)的方案. 其实可以乱搞,因为范围只有720.求出全排列,然后每个 ...
- 【日常训练】Help Far Away Kingdom(Codeforces 99A)
题意与分析 题意很简单,但是注意到小数可能有一千位,作为一周java选手的我选择了java解决. 这里的分析会归纳一些必要的Java API:(待补) 代码 /* * ACM Code => c ...
- Palindrome Degree(CodeForces 7D)—— hash求回文
学了kmp之后又学了hash来搞字符串.这东西很巧妙,且听娓娓道来. 这题的题意是:一个字符串如果是回文的,那么k值加1,如果前一半的串也是回文,k值再加1,以此类推,算出其k值.打个比方abaaba ...
随机推荐
- spring中@Autowrite注解和@Resource的区别
spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...
- Oracle问题分析采集数据的方法
1.背景: 运维人员或多或少都会遇到分析问题.分析故障的时候,往往在碰到一些棘手的问题事,我们都会往更深层次的专家进行求助.不管是二线专家还是Oracle全球服务工程师(后文称GCS工程师),往往都会 ...
- MitmProxy使用
安装 tar -zxvf mitmproxy-3.0.1-linux.tar.gz sudo mv mitmproxy mitmdump mitmweb /usr/bin 详情 https://ger ...
- ubuntu16.04更换镜像源
1.备份原有 cp /etc/apt/sources.list /etc/apt/sources.list.old 2.打开阿里巴巴镜像源: https://opsx.alibaba.com/mir ...
- java设计模式3--观察者模式
1.初步认识 观察者模式的定义: 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新. 大白话: 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了 ...
- (转)为什么在 2013 十月番中出现了很多以 3D 渲染代替传统 2D 绘画来表现人物的镜头?
一直都有的,特别是三次元这家公司一直致力于3d的风格化渲染既大家说的3d转2d.目前最厉害的商业化软件是pencil+,占领大部分的作品.而mentalray,早期用于disney的部分风格化渲染:i ...
- pandas库Series类型与基本操作
pandas读取excel的类型是dataFrame,然后提取每一列是一个Series类型 Series类型包括index和values两部分 a = pd.Series({'a':1,'b':5}) ...
- Python9-条件-定时器-队列-day40
复习 线程 线程是进程中的执行单位 线程是cpu执行的最小单位 线程之间资源共享 线程的开启和关闭以及切换的时间开销远远小于进程 线程本身可以在同一时间使用多个cpu,python与线程 由于cpyt ...
- Computer HDU - 2196
Computer HDU - 2196 A school bought the first computer some time ago(so this computer's id is 1). Du ...
- Benelux Algorithm Programming Contest 2014 Final
// Button Bashing (bfs) 1 #include <iostream> #include <cstdio> #include <cstring> ...