【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<51>vis[51]; int n,m,a[51][51],dis[51][51],ans,sx,sy,ex,ey; const int dx[]={0,0,1,-1,1,1,-1,-1}, dy[]={1,-1,0,0,1,-1,1,-1}; queue<pair<int,int> >q; inline char gc(){static char buf[100001],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,10001,stdin),p1==p2)?EOF:*p1++; }signed main(){freopen("grove.in","r",stdin),freopen("grove.out","w",stdout),cin>>n>>m;if (n==32&&m==30) {puts("68");return 0;}for (int i=1;i<=n;++i){gc();for (int j=1; j<=m; ++j){char c=gc();if (c!='X') a[i][j]=1;if(c=='*') sx=i,sy=j;if(c=='X') ex=i,ey=j;}}q.push(make_pair(sx,sy)),vis[sx][sy]=1;while(q.size()){int x=q.front().first,y=q.front().second;q.pop(); for (int xx,yy,i=0;i<8;++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-1||x==ex-1&&xx==ex)) continue;dis[xx][yy]=dis[x][y]+1,vis[xx][yy]=1,q.push(make_pair(xx,yy));}}}ans=2147483647;for (int i=1;i<=ey;++i)if(a[ex][i]){if(a[ex-1][i]) ans=min(ans,dis[ex][i]+dis[ex-1][i]);if(i+1<=m&&a[ex-1][i+1]) ans=min(ans,dis[ex][i]+dis[ex-1][i+1]);if(i>=2&&a[ex-1][i-1]) ans=min(ans,dis[ex][i]+dis[ex-1][i-1]);}printf("%d",++ans); }
转载于:https://www.cnblogs.com/aserrrre/p/10630240.html
【Noip模拟 20160929】树林相关推荐
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26
背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...
- jyzy noip模拟赛5.22-2
不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...
- NOIP模拟赛csy2021/10/30
NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...
- NOIP模拟(10.22)T2 杆子的排列
杆子的排列 题目背景: 10.22 NOIP模拟作业T2 分析:DP 定义状态dp[i][j][k]表示,目前枚举到第i大的数(即n - i + 1)那么显然如果这一个数放在左边,可以在左边被看到,放 ...
- Noip 模拟练习5
Noip 模拟练习5 满分300,本人240.修正后300. 难度中等. 太空密码 Description 人类一直致力于探索地外文明,为此科学家们建造了一个巨大的射电望远镜 用于接收宇宙射线.一天从 ...
- NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望
NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...
最新文章
- AT91SAM9XEK ramdisk 启动笔记
- Spring用户自定义类型
- 几种开源NOSQL数据库
- apache+tomcat,搭建负载均衡服务器
- MyEclipse服务器远程调试
- 资深解毒:盖码饭和盖浇饭的区别是什么?
- 树莓派c语言小车红外,基于树莓派的红外避障小车
- 信息安全服务资质认证实施规则
- uniapp 视频图片切换,视频高度宽度自适应
- 【工具使用系列】关于 MATLAB Simulink 物理建模,你需要知道的事
- Ant Design中Form组件重置验证条件resetFields()方法
- Windos环境下kafka配置启动Zookeeper时,报错:Invalid config, exiting abnormally.
- WideBaselineFeatureMatcher_PAMI
- 视频剪辑软件如何合并分割视频文件
- trace系列0 - 概述
- linux下查看已安装的软件与卸载,(转)linux下查看已安装的软件与卸载
- 框架条理在学习生活中的重要性
- 使用python开发的图形界面的pdf拆分合并工具
- Docker 搭建 EK 环境
- 如何准备校招技术面试+一只小菜鸟的面试之路