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 ...
随机推荐
- Q&A - 如何获取ip地址所在地
获取其IP地址后,传入以下URL,并请求该URL,该请求会响应一个JSON格式的数据包,该IP地址的所在地均在这个数据包内 http://int.dpool.sina.com.cn/iplooku ...
- 7-1 python 操作redis
1.安装并导入redis模块 # pip install redis 安装redis模块 import redis # 导入redis模块 2.连接一个或多个redis,指定数据库名,并指定返回字符串 ...
- 谷歌浏览器如何调试JS
平常在开发过程中,经常会接触到前端页面.那么对于js的调试那可是家常便饭,谷歌浏览器是常用来调试JS代码的工具,本文主要介绍如何利用谷歌浏览器来调试JS代码,协助我们进行开发工作,加快开发效率. 1. ...
- JZOJ 5922. sequence
5922. [NOIP2018模拟10.23]sequence (File IO): input:sequence.in output:sequence.out Time Limits: 1000 m ...
- python 函数的嵌套 和 作用域链
# def max(a,b): # return a if a>b else b # # def the_max(x,y,z): #函数的嵌套调用 # c = max(x,y) # return ...
- 636. Exclusive Time of Functions
// TODO: need improve!!! class Log { public: int id; bool start; int timestamp; int comp; // compasa ...
- Jongmah CodeForces - 1110D
传送门 题意:你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 题解:三个一模一样的 ...
- keil调试问题记录
1.错误类型:L6218E:Underfined symbol &&&&&&&&& (referred form &&a ...
- scala Actor -03
1.对于上一篇讲解的scala的一些补充 val files = Array[String]("a.txt","b.txt","c.txt" ...
- W/System.err: at android.view.ViewConfiguration.get(ViewConfiguration.java:369)
*11-09 11:48:38.558 13887-13900/? W/System.err: at android.view.WindowManagerGlobal.getWindowManager ...