传送门

##解题思路

看上去很简单,$bfs$写了一发被$fst$。。。后来才知道好像一群人都被$fst$了,这道题好像那些每个点只经过一次的传统$bfs$都能被叉,只需要构造出一个一块一直上下走,还有一块一直左右走,上下走走到左右走的格子里更优,但已经更新不了,就$GG$了。后来学习了一下$rank1$的代码,其实用一个双端队列就可以避免这个问题,每次把上下走的放到队头,左右走的放到队尾。这样的话每次左右遍历时一定是最优的。

##代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue> using namespace std;
const int MAXN = 2005; int n,m,stx,sty,X,Y,ans;
bool vis[MAXN][MAXN];
char mp[MAXN][MAXN];
deque<int> Q[5]; void bfs(){
Q[1].push_front(stx),Q[2].push_front(sty),Q[3].push_front(X),Q[4].push_front(Y);
while(Q[1].size()){
int x=Q[1].front(),y=Q[2].front(),l=Q[3].front(),r=Q[4].front();
Q[1].pop_front();Q[2].pop_front();Q[3].pop_front();Q[4].pop_front();
if(vis[x][y]) continue;vis[x][y]=1;ans++;
if(x-1>=1 && mp[x-1][y]!='*') {
Q[1].push_front(x-1);Q[2].push_front(y);Q[3].push_front(l);Q[4].push_front(r);
}
if(x+1<=n && mp[x+1][y]!='*'){
Q[1].push_front(x+1);Q[2].push_front(y);Q[3].push_front(l);Q[4].push_front(r);
}
if(y-1>=1 && mp[x][y-1]!='*' && l) {
Q[1].push_back(x);Q[2].push_back(y-1);Q[3].push_back(l-1);Q[4].push_back(r);
}
if(y+1<=m && mp[x][y+1]!='*' && r){
Q[1].push_back(x);Q[2].push_back(y+1);Q[3].push_back(l);Q[4].push_back(r-1);
}
}
} int main(){
scanf("%d%d%d%d%d%d",&n,&m,&stx,&sty,&X,&Y);
for(int i=1;i<=n;i++) scanf("%s",mp[i]+1);
bfs();cout<<ans;
return 0;
}

CF 1063B Labyrinth的更多相关文章

  1. Codeforces 1064D/1063B Labyrinth

    原题链接/原题链接(代理站) 题目翻译 给你一个\(n*m\)的迷宫和起始点,有障碍的地方不能走,同时最多向左走\(x\)次,向右走\(y\)次,向上向下没有限制,问你有多少个格子是可以到达的. 输入 ...

  2. CodeForces 1063B. Labyrinth 性质

    给定$n *m$的格子 询问从$(r, c)$开始最多向左走$x$步,向右走$y$步 询问有多少个格子可以从$(r, c)$到达 有障碍物,$n, m \leqslant 2 * 10^3$ 对于一个 ...

  3. CF D. Labyrinth 01BFS

    由于上下走不限制,所以按照贪心,我们应该尽可能走上下方向. 我们可以开一个双端队列,并认为每次提取队首的时候得到的是到达该点的最优策略.(这个一定是唯一的,因为不可能向右走几格,然后再退回去. ) 那 ...

  4. 【非原创】codeforces 1063B Labyrinth 【01bfs】

    学习博客:戳这里 附本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 co ...

  5. [Codeforces Round #516][Codeforces 1063B/1064D. Labyrinth]

    题目链接:1063B - Labyrinth/1064D - Labyrinth 题目大意:给定一个\(n\times m\)的图,有若干个点不能走,上下走无限制,向左和向右走的次数分别被限制为\(x ...

  6. CF 1064 D. Labyrinth

    D. Labyrinth http://codeforces.com/contest/1064/problem/D 题意: n*m的矩阵,只能往左走l次,往右走r次,上下走无限制,问能走到多少个点. ...

  7. 【Codeforces 1063B】Labyrinth

    [链接] 我是链接,点我呀:) [题意] 你可以往左最多x次,往右最多y次 问你从x,y出发最多能到达多少个格子 只能往上下左右四个方向走到没有障碍的格子 [题解] 假设我们从(r,c)出发想要到固定 ...

  8. 题解 CF1063B 【Labyrinth】

    题解 CF1063B [Labyrinth] 完了我发现我做CF的题大部分思路都和别人不一样qwq 这道题其实很水,不至于到紫题 我们只要bfs一下,向四个方向剪下枝,就A了(好像还跑的蛮快?) 是一 ...

  9. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

随机推荐

  1. singleton 类模板限制类只能定义一个对象

    singleton 类模板限制类只能定义一个对象 singleton 类模板限制类只能定义一个对象 singleton 类模板限制类只能定义一个对象 ???

  2. 14. static(静态) 关键字

    1.修饰成员变量 1)定义:数据需要被共享给所有对象使用使用static修饰(全局变量) 2)注意: 1.用static中创建的成员变量在内存中只有一份 2.千万不要为了方便访问数据而使用static ...

  3. PS安装失败解决方法

    清除Adobe软件卸载残余文件 ,使用下面的工具,可以清除残余文件,然后再次安装 链接: https://pan.baidu.com/s/1OfIDnjpmqw34dWQ8LH6fIQ 提取码: b7 ...

  4. Springboot 上传文件

    @PostMapping("/upload")//springboot可以直接扫描resource下的static文件夹下的静态文件 public String upload(@R ...

  5. thinkphp 表单合法性检测

    在处理表单提交的数据的时候,建议尽量采用Think\Model类提供的create方法首先进行数据创建,然后再写入数据库. 大理石平台厂家 create方法在创建数据的同时,可以进行更为安全的处理操作 ...

  6. 微信小程序自定义导航栏组件,完美适配所有手机,可实现各种功能和情况

    背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS 手机对于页面 title 的展示不一致,安卓 title 的显示不居中 页面的 title 只支持纯文本级别的样式控 ...

  7. 自定义alert 确定、取消功能

    以删除为例,首先新建html <table border="1" cellpadding="0" cellspacing="0" id ...

  8. C/C++:Windows编程—调用DLL程序的2种方法(转载)

    文章为转载,原文出处https://blog.csdn.net/qq_29542611/article/details/86618902 前言先简单介绍下DLL.DLL:Dynamic Link Li ...

  9. jsonp的原理,应用场景,优缺点

    在开发测试中,难免会在不同域下进行跨域操作,出于安全性考虑,浏览器中的同源策略阻止从一个域上加载的脚本获取或者操作 另一个域下的文档属性,这时需要进行跨域的方式进行解决,如:使用jsonp ,ifra ...

  10. 堡垒机介绍及实现 (使用python django实现)(一)

    堡垒机介绍及实现 (使用python django实现)(一) 堡垒机的功能 我们在使用服务器的时候,通常的方式是 ssh user@ip 然后输入password 多人同时使用,就需要多个账号.这时 ...