【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 ...
随机推荐
- 最短路,dijstra算法
#include<iostream> #include<stdio.h> #include<math.h> #include<vector> using ...
- More is better
题目描述: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the ...
- MyEclipse 启动慢,优化
找到安装目录,修改myeclipse.ini 文件: -Xms2048m -Xmx8192m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=256m
- 重开ES6
一.ES6的开发环境搭建 现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们把ES6的语法自动的转变成ES5的语法. 1.建立工程目录: 先建立一个项 ...
- IDEA控制台乱码解决
打开Intellij的安装的bin目录(D:\Program Files\JetBrains\IntelliJ IDEA 14.0\bin ),找到上图的两个文件(根据你的系统是32位或64位选择其中 ...
- IC卡插入与触点激活时序
当IC卡插入接口设备时,终端应确保其所有触点处于低电平状态: 当IC卡插入接口设备后,触点须按如下方式激活: 要点: 终端必须在整个激活时序中保持RST为低电平状态: 触点物理接触之后,应在IO或CL ...
- python学习之路07
Python中你可能不关心的这几个关键字:break.continue.pass 1.break 作用:跳出循环[直接跳出整个循环,继续执行后面的代码] 1.特殊情况一 #当break使用在嵌套循环中 ...
- jenkins使用(ubuntu16.0环境)
本文总结了使用jenkins过程.大部分是网上链接,以后自已查看使用. ssh远程链接服务器 检查是否开启ssh ps -ef|grep ssh 1.安装ssh 2.开启root用户 3.充许ro ...
- Ubuntu 16.04 安装 JDK 1.8
系统环境 Ubuntu 16.04; JDK 1.8 配置安装 1.首先从oracle下载jdk 1.8,我下载的版本是jdk-8u131-linux-x64.tar.gz,运行tar zvxf jd ...
- [UE4]List View
List View适合显示数以千条的列表 要点 一.创建Entry类,实现IUserObjectListEntry. 创建一个名为“EntryWidget”的UserWidget,添加如下图所示的控件 ...