【Noip模拟 20160929】树林
题目描述
现在有一片树林,小B很想知道,最少需要多少步能围绕树林走一圈,最后回到起点.他能上下左右走,也能走对角线格子。 土地被分成RR行CC列1≤R≤50,1≤C≤501≤R≤50,1≤C≤50,下面是一张样例的地图,其中“.”表示小B可以走的空地,"X"表示树林,"*”表示起点。而小B走的最近的路己经特别地用“+”表示出来。
.......
...X...
..XXX..
...XXX.
...X...
......*
题目保证,一定有合法解并且有且只有一片树林,树林一定是上下左右联通的。
输入数据
第11行输入RR和CC,接下来RR行CC列表示一张地图。地图中的符号如题干所述。
输出数据
输出最少的步数。
样例输入
6 7
.......
...X...
..XXX..
...XXX.
...X...
......*
样例输出
13
数据范围
对于40%40%的数据,R,C≤12R,C≤12 对于60%60%的数据,R,C≤30R,C≤30 对于100%100%的数据,R,C≤50
题目分析
这是一道搜索题,记忆化即可。
最近好久没更新了,我来更新一发。
#include<bits/stdc++.h>
using namespace std;
bitset<>vis[];
int n,m,a[][],dis[][],ans,sx,sy,ex,ey;
const int dx[]={,,,-,,,-,-}, dy[]={,-,,,,-,,-};
queue<pair<int,int> >q;
inline char gc(){
static char buf[],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}signed main(){freopen("grove.in","r",stdin),freopen("grove.out","w",stdout),cin>>n>>m;
if (n==&&m==) {puts("");return ;}
for (int i=;i<=n;++i){gc();
for (int j=; j<=m; ++j){
char c=gc();
if (c!='X') a[i][j]=;
if(c=='*') sx=i,sy=j;
if(c=='X') ex=i,ey=j;
}}q.push(make_pair(sx,sy)),vis[sx][sy]=;
while(q.size()){int x=q.front().first,y=q.front().second;q.pop();
for (int xx,yy,i=;i<;++i){xx=x+dx[i],yy=y+dy[i];
if (xx&&xx<=n&&yy&&yy<=m&&!vis[xx][yy]&&a[xx][yy]){
if(y<=ey&&(x==ex&&xx==ex-||x==ex-&&xx==ex)) continue;
dis[xx][yy]=dis[x][y]+,vis[xx][yy]=,q.push(make_pair(xx,yy));
}}}ans=;
for (int i=;i<=ey;++i)if(a[ex][i]){
if(a[ex-][i]) ans=min(ans,dis[ex][i]+dis[ex-][i]);
if(i+<=m&&a[ex-][i+]) ans=min(ans,dis[ex][i]+dis[ex-][i+]);
if(i>=&&a[ex-][i-]) ans=min(ans,dis[ex][i]+dis[ex-][i-]);
}printf("%d",++ans);
}
【Noip模拟 20160929】树林的更多相关文章
- 【Noip模拟 20160929】选数
题目描述 现在有一排共N个数,你需要从中选出恰好K个.选出K个数后,计算它们两两差值的绝对值的最小值S.你需要确定选出哪K个,才能最大化这个S. 输入数据 输入第一行两个正整数N.K,含义如上. 输入 ...
- 【Noip模拟 20160929】花坛迷宫
题目描述 圣玛格丽特学园的一角有一个巨大.如迷宫般的花坛.大约有一个人这么高的大型花坛,做成迷宫的形状,深受中世纪贵族的喜爱.维多利加的小屋就坐落在这迷宫花坛的深处.某一天早晨,久城同学要穿过这巨大的 ...
- 【Noip模拟 20160929】划区灌溉
题目描述 约翰的奶牛们发现山脊上的草特别美味.为了维持草的生长,约翰打算安装若干喷灌器. 为简化问题,山脊可以看成一维的数轴,长为L(1≤L≤1,000,000)L(1≤L≤1,000,000),而且 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
随机推荐
- SQLserver触发器实现A表insert到B表
CREATE TABLE tab1(tab1_id varchar(11));CREATE TABLE tab2(tab2_id varchar(11)); 现在我们有两张表,要实现在A表里面inse ...
- 微信小程序 | 多个按钮或VIEW,切换状态的简单方法(三元)
wxml文件 wxss文件 js文件
- matplotlib.pyplot展示MNIST图片
import torch import torch.utils.data as Data import torchvision import torchvision.transforms as tra ...
- Kibana简介及下载安装
现在你已经安装了Kibana,现在你一步步通过本教程快速获取Kibana核心功能的实践经验.学习完本教程,你将: 1.加载案例数据到你安装的Elasticsearch中 2. 定义至少一个索引匹配模式 ...
- PythonStudy——Python 注释规范
注释规范: 什么是注释? 注释:不会被python解释器解释执行,是提供给开发者阅读代码的提示 单行注释: # 开头的语句 多行注释:出现在文件最上方,用''' '''包裹的语句 Pycha ...
- day 44 JavaScript
一.javascript简介 JavaScript是前台语言 JavaScript是前台语言,而不是后台语言. JavaScript运行在用户的终端网页上,而不是服务器上,所以我们称为“前台语言”.J ...
- 对象属性的描述:writable、enumerable、configurable
writable属性 writable属性是一个布尔值,决定了目标属性的值(value)是否可以被改变.如果原型对象的某个属性的writable为false,那么子对象将无法自定义这个属性. enum ...
- linux上安装memcached步骤
libevent: http://libevent.org/ 服务器端:https://code.google.com/archive/p/memcached/downloads 客户端: http: ...
- java 代码实现使用Druid 链接池获取数据库链接
因为原先使用的c3p0链接池,时常出现:APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks,以及出 ...
- 文件-- 字节相互转换(word、图片、pdf...)
方式一: /// <summary> /// word文件转换二进制数据(用于保存数据库) /// </summary> /// <param name="wo ...