题解:P2130 狂奔的Wzf
solution
判断有无障碍的时候不需要以此枚举,利用前缀和,如果前缀为零证明没有障碍。
重复很多,写的很丑了,#3死活不过
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstdlib>
using namespace std;
int n,m;
const int N = 1100;
char s[N][N];
int zkx[N][N],sky[N][N],map[N][N];
int bfs() {
queue<pair<int,int> > q;
q.push(make_pair(1,1));
while(!q.empty()) {
int x=q.front().first,y=q.front().second;q.pop();
for(int j=0;y+(1<<j)<=m;j++) {
int tx=x,ty=y+(1<<j);
if(sky[tx][ty]-sky[x][y-1]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
for(int j=0;y-(1<<j)>=1;j++) {
int tx=x,ty=y-(1<<j);
if(sky[x][y]-sky[tx][ty-1]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
for(int j=0;x+(1<<j)<=n;j++) {
int tx=x+(1<<j),ty=y;
if(zkx[tx][ty]-zkx[x-1][y]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
for(int j=0;x-(1<<j)>=1;j++) {
int tx=x-(1<<j),ty=y;
if(zkx[x][y]-zkx[tx-1][ty]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
}
}
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
char c;cin>>c;
s[i][j]=c;
}
}
if(s[1][1]=='#') return puts("0"),0;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) sky[i][j]=sky[i][j-1]+(s[i][j]=='#'||s[i][j]=='$'?0:1);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) zkx[i][j]=zkx[i-1][j]+(s[i][j]=='#'||s[i][j]=='$'?0:1);
bfs();cout<<-1;
return 0;
}
题解:P2130 狂奔的Wzf的更多相关文章
- 洛谷P2125图书馆书架上的书 题解报告
题目描述 图书馆有n个书架,第1个书架后面是第2个书架,第2个书架后面是第3个书架……第n-1个书架后面是第n个书架,第n个书架后面是第1个书架,第i个书架上有b[i]本书.现在,为了让图书馆更美观, ...
- [JZOJ5281]钦点题解--瞎搞+链表
[JZOJ5281]钦点题解--瞎搞+链表 题目链接 于 暴 力 过
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- 为用户分配有效期程序-更新数据库的TRY使用
REPORT ZPMRP030. TABLES:USR02. DATA: L_ERROR TYPE REF TO CX_SY_OPEN_SQL_DB, L_ERROR_TEXT TYPE STRING ...
- pandas 初识(五)
1. 如何实现把一个属性(列)拆分成多列,产生pivot,形成向量信息,计算相关性? 例: class_ timestamp count 0 10 2019-01-20 13:23:00 1 1 10 ...
- xshell破解
1.下载注册版本 第一步.打开netsarang公司的官方中文网站,https://www.netsarang.com/zh/all-downloads,选择Xshell6下载 第二步.选择试 ...
- zabbix批量清理模板,添加新模板
import requests import json import sys def get_token(): data = { "jsonrpc": "2.0" ...
- 设置tabBar的图片/高度/title颜色
实现了一下内容: 1.设置tabBarItem选中及非选中时的图片,图片充满item; 2.调整了 tabBar 高度; 3.改变了title颜色及位置. ------------代码如下: ---T ...
- openstack-neutron安装与配置
一.实验目的: 1.理解neutron服务在OpenStack中的作用 2.掌握在控制节点上安装配置neutron的方法和步骤 3.掌握在计算节点上安装与配置neutron的方法和步骤 二.实验步骤: ...
- python中json与pickle的简要说明
import json ======> 注意:不同语言之间通用但不能传输对象类型 该模块中最重要的方法: 1.json.dump(‘python数据’,‘json文件’) # 将pyt ...
- 浮点运算与boost.multiprecision
在C++中,float占4个字节,double占8个字节,均采用 IEEE 754 浮点标准:内部都是以二进制为基础,表述实数,有些实数可以被精确表述,比如0.2,但有些不行,比如0.3.针对这一点, ...
- Vue.js中 watch(深度监听)的最易懂的解释
<div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text& ...
- Think in Java 笔记(chapter1-7)
Content Chapter 1:对象导论 Chapter 2:一切都是对象 Chapter 3:操作符 Chapter 4:控制执行流程 Chapter 5:初始化与清理 Chapter 6:访问 ...