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 ...
随机推荐
- kali安装ssh服务
一. kali安装ssh服务 1.修改源 root@DGG:~# vi /etc/apt/sources.list deb http://http.kali.org/kali kali-rolling ...
- Rsync备份服务部署
1 Rsync服务器架构规划 在搭建服务之前需要做以下规划设计,其中包括:主机规划表.主机IP地址规划表.主机架构图.主机hosts解析以及linux主机基础优化等 1.1 主机规划表 服务器说明 数 ...
- mysql悲观锁与乐观锁
简介 数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性. 用途 乐观锁和悲观锁是并发控制主要采用的技术手段.无论是悲观 ...
- iOS-修改modal出来的控制器的大小
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ static BOOL sh ...
- Highest Tower 18中南多校第一场H题
一.题意 给出N个方块,要求给出一个方案,使得1. 所有方块都被使用到(题目数据保证这点) 2.所有方块垒成一个塔,且上面的方块宽度小于下面的方块 3.每个方块只能用一次,可以横着或者竖着. n范围5 ...
- INSERT⋯ACCEPTING_DUPLICATE_KEYS
使用ACCEPTING DUPLICATE KEYS时,当插入时发现这条记录已存在时,那么这条记录将不会被insert,后续记录继续执行insert
- Git-Git库管理
对象和引用哪里去了? 从GitHub上克隆一个示例版本库,这个版本库在"历史穿梭"一章就已经克隆过一次了,现在要重新克隆一份.为了和原来的克隆相区别,克隆到另外的目录.执行下面的命 ...
- 5,pandas高级数据处理
1.删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True - keep参数:指定保留哪一重复的行 ...
- [原]sencha touch之表单二(注册页面)
接着上一篇的登陆页面,来一个最简单的注册页面,几乎包含了常用的field Ext.application({ id:'itKingApp', launch:function(){ var formPa ...
- css3 3D
开通黄钻 Css3 -3D效果<!DOCTYPE html><html lang="en"><head> <meta charset=&q ...