Codeforces Round #516 (Div. 2)D. Labyrinth
D. Labyrinth
题目链接:https://codeforces.com/contest/1064/problem/D
题意:
给出一个n*m的矩阵以及人物的起点,并且给出x,y,分别代表这个人向左最多走x步,向右最多走y步。
矩阵中存在障碍,问这个人最多能到达多少数量的格子。
题解:
就是一个bfs...只是要稍微剪枝一下,如果发现当前这个点所到达的格子已经被之前的一个点到达过,当且仅当当前点的x或y至少一个比之前到达的点大时,就将这个点入队。
只有这样才能保证解最优。
代码如下:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int N = ;
int n,m,R,C;
int mp[N][N],vis[N][N][],l[N][N],r[N][N],check[N][N];
int dx[]={-,,,};
int dy[]={,,,-};
int ans = ;
char s[N];
bool ok(int x,int y){
if(x>= && x<=n && y>= && y<=m && mp[x][y]!=) return true;
return false ;
}
struct node{
int x,y,lx,ly;
}cur;
queue <node> q;
void bfs(){
while(!q.empty()){
node now = q.front();q.pop();
int x = now.x,y = now.y,l,r;
for(int i=;i<;i++){
cur.x=x+dx[i];cur.y=y+dy[i];
l = now.lx;r = now.ly;
if(i==) r--;
if(i==) l--;
if(ok(cur.x,cur.y)&&r>=&&l>=){
if(l>vis[cur.x][cur.y][]||r>vis[cur.x][cur.y][]){
if(vis[cur.x][cur.y][]==-) ans++;
q.push(node{cur.x,cur.y,l,r});
vis[cur.x][cur.y][]=l;
vis[cur.x][cur.y][]=r;
}
}
}
}
}
int main(){
int x,y;
cin>>n>>m>>R>>C>>x>>y;
for(int i=;i<=n;i++){
scanf("%s",s);
for(int j=;j<m;j++){
if(s[j]=='.') mp[i][j+]=;
else mp[i][j+]=;
}
}
q.push(node{R,C,x,y});
memset(vis,-,sizeof(vis));
vis[R][C][]=x;vis[R][C][]=y;
check[R][C]=;
bfs();
cout<<ans;
return ;
}
Codeforces Round #516 (Div. 2)D. Labyrinth的更多相关文章
- Codeforces Round #516 (Div. 2)D. Labyrinth(BFS)
题目链接:http://codeforces.com/contest/1064/problem/D 题目大意:给你一个n*m的图,图中包含两种符号,'.'表示可以行走,'*'表示障碍物不能行走,规定最 ...
- Codeforces Round #433 (Div. 2)【A、B、C、D题】
题目链接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction[水] 题意:已知分子与分母的和,求分子小于分母的 最大的最简分数. #in ...
- Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth(重识搜索)
https://codeforces.com/contest/1064/problem/D 题意 给你一个有障碍的图,限制你向左向右走的次数,问你可以到达格子的个数 思路 可以定义状态为vi[x][y ...
- Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth
http://codeforces.com/contest/1064/problem/D 向上/向下加0,向左/右加1, step = 0,1,…… 求的是最少的步数,所以使用bfs. step=k ...
- Codeforces Round #516 (Div. 2) (A~E)
目录 Codeforces 1064 A.Make a triangle! B.Equations of Mathematical Magic C.Oh Those Palindromes D.Lab ...
- Codeforces Round #292 (Div. 1)A. Drazil and Factorial 构造
A. Drazil and Factorial 题目连接: http://codeforces.com/contest/516/problem/A Description Drazil is play ...
- Codeforces Round #516(Div 2)
比赛链接:传送门 A. Make a triangle!(简单思维) 题目大意: 给你三条边,问你最多加多少长度能使这三条边能构成三角形. 思路: 最大边小于答案加另外两条边的和. #include ...
- B. Ohana Cleans Up(Codeforces Round #309 (Div. 2))
B. Ohana Cleans Up Ohana Matsumae is trying to clean a room, which is divided up into an n by n gr ...
- B. The Number of Products(Codeforces Round #585 (Div. 2))
本题地址: https://codeforces.com/contest/1215/problem/B 本场比赛A题题解:https://www.cnblogs.com/liyexin/p/11535 ...
随机推荐
- 什么是shell 是不是什么时候都可以使用shell
因为Shell似乎是各UNIX系统之间通用的功能,并且经过了POSIX的标准化.因此,Shell脚本只要"用心写"一次,即可应用到很多系统上.因此,之所以要使用Shell脚本是基于 ...
- python--Wrapper
然后给大家介绍的是Wrapper(装饰器),使用广泛.python笔试,面试的话也会百分百问到的,基础和中级的知识储备还是必用的. 让我们开始. 先来一些基础相关知识 *args,**kwargs的区 ...
- Python--基础2
class Ball: #def setname(self,name): def __init__(self,name): self.name = name def __kick(self): #__ ...
- 1014-34-首页15-计算原创微博的frame------计算cell的高度---计算 UILabel 的 CGSize 的方法
一.总体思路: 在控制器中,每次拿到数据模型(请求了数据.加载新微博)的时候,就调用 - (NSArray *)stausFramesWithStatuses:(NSArray *)statuses, ...
- linux-shell——03
mkdir 创建一个新目录格式: mkdir [选项-p][路径]目录名 -p 递归创建多级目录 mkdir -p b/c/e/f/g rmdir 删除一个空目录 touch 创建一个空文件,更新文件 ...
- 在intellij idea 里来回跳转查询方法
在intellij idea 里来回跳转查询方法,在不知道快捷键的时候真是抓狂. 看到key map中的快捷键 后退back ctrl +alt + ← 或者button4 click 前进forw ...
- 从Wireshark看TCP连接的建立与关闭
TCP是一种面向连接.可靠的协议.TCP连接的建立与断开,都是需要经过通信双方的协商.用一句话概括就是:三次握手say hello(建立连接):四次握手say goodbye(断开连接).要了解TCP ...
- 使用 Ajax
Ajax( Asynchronous JavaScript and XML) 在 Ajax 中 Asynchronous 是指异步, 代表 客户端(Client 通常是指浏览器) 可以向服务器(Ser ...
- 质数,$\varphi$和$\mu$线性筛
typedef long long ll; bool check[N]; int mu[N],pri[N],tot; ll phi[N]; void init(int lim){ check[]=,p ...
- JS 金钱格式化
JavaScript Money Format(用prototype对Number进行扩展) Number.prototype.formatMoney = function (places, symb ...