16.1117 NOIP 模拟赛
水灾(sliker.cpp/c/pas) 1000MS 64MB
大雨应经下了几天雨,却还是没有停的样子。土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没。
CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上有五种符号:“. * X D S”。其中“X”表示石头,水和人都不能从上面经过。“.”表示平原,CCY和洪水都可以经过。“*”表示洪水开始地方(可能有多个地方开始发生洪水)。“D”表示CCY的别墅。“S”表示CCY现在的位置。
CCY每分钟可以向相邻位置移动,而洪水将会在CCY移动之后把相邻的没有的土地淹没(从已淹没的土地)。
求CCY回到别墅的最少时间。如果聪哥回不了家,就很可能会被淹死,那么他就要膜拜黄金大神涨RP来呼叫直升飞机,所以输出“ORZ hzwer!!!”。
输入文件 sliker.in
输出文件 sliker.out
Input
3 3
D.*
…
.S.
Output
3
Input
3 3
D.*
…
..S
Output
ORZ hzwer!!!
Input
3 6
D…*.
.X.X..
….S.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int hx[],hy[],h;
int x1,y1,x2,y2;
int n,m;
char c[];
bool b[][],tx[][];
int tim[][],a[][];
int dx[]={,,-,};
int dy[]={,,,-};
int xx[],yy[];
void sousuo(int t,int x,int y)
{
tim[x][y]=min(t,tim[x][y]);
for(int i=;i<;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(b[xx][yy]&&xx>&&xx<=n&&yy>&&yy<=m&&t+<tim[xx][yy])
sousuo(t+,xx,yy);
}
}
int main()
{
freopen("sliker.in","r",stdin);
freopen("sliker.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
cin>>c;
for(int j=;j<m;j++)
{
switch(c[j])// b数组标记能否走这个格子
{
case '.':b[i][j+]=true;break;
case 'S':x1=i;y1=j+;b[i][j+]=true;break;
case 'D':x2=i;y2=j+;b[i][j+]=false;break;// 别墅暂时标记为不能走
case '*':++h;hx[h]=i;hy[h]=j+;break;// 记录洪水发生地点
case 'X':b[i][j+]=false;break;
}
}
}
memset(tim,,sizeof(tim));// tim表示洪水到达该格点的最少时间
memset(a,,sizeof(a));// a表示人走到该格点的最少时间
for(int i=;i<=h;i++)
sousuo(,hx[i],hy[i]);// 洪水所有的初始地点
b[x2][y2]=true;// 将别墅 标记为能走
xx[]=x1,yy[]=y1;
int head=,tail=;
a[x1][y1]=;
tx[x1][y1]=true;// tx 数组标记是否已经走过 true为已经走过
while(head<=tail)
{
++head;
int x=xx[head],y=yy[head];
for(int i=;i<;i++)
{
int mx=x+dx[i],my=y+dy[i];
if(b[mx][my]==true&&mx>&&mx<=n&&my>&&my<=m&&a[x][y]+<tim[mx][my])
{// a[x][y]+1<tim[mx][my] 人能够在洪水到达该格子之前到达就说明可以走,否则--
a[mx][my]=min(a[mx][my],a[x][y]+);
if(tx[mx][my]==false)
{
tx[mx][my]=true;
tail++;
xx[tail]=mx;
yy[tail]=my;
}
}
}
}
if(a[x2][y2]<a[][]) printf("%d\n",a[x2][y2]);
else printf("ORZ hzwer!!!\n");
fclose(stdin);fclose(stdout);
return ;
}
思路:见代码中解释
Output
6
16.1117 NOIP 模拟赛的更多相关文章
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们 ...
- Nescafe #29 NOIP模拟赛
Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- 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/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
随机推荐
- The Performance Manifesto
Manifesto For Performance Testing And Engineering We choose to support others in their quest for bet ...
- Java 利用FTP上传,下载文件,遍历文件目录
Java实现FTP上传下载文件的工具包有很多,这里我采用Java自带的API,实现FTP上传下载文件.另外JDK1.7以前的版本与其之后版本的API有了较大的改变了. 例如: JDK1.7之前 JDK ...
- 【转】windows server 2012 安装 VC14(VC2015) 安装失败解决方案
系统环境如下:cmd命令行-输入 systeminfo 如下图 - The VC14 builds require to have the Visual C++ Redistributable for ...
- git项目常用命令
git rm --cached 文件名 //移除不上传 git add . //添加所有文件 .gitignore //git忽略不想上传或者不需要上传的文件 REAMDE.md 文 ...
- Java JDK装配置
1- 介绍 本文章介绍JAVA开发环境安装是基于: Java8(JDK8) 2- 下载JDK http://www.oracle.com/technetwork/java/javase/dow ...
- 李开复:AlphaGo 若打败了世界冠军,意味着什么?
创新工场董事长李开复在知乎就AlphaGo与李世石的人机大战发表了自己看法,他认为四个月前的AlphaGo击败李世石基本不可能,不过这四个月AlphaGo进步很多,比赛应该很精彩.但是,无论这次结果如 ...
- Apache的HttpClient的使用
Apache的HttpClient可以被用于从客户端发送HTTP请求到服务器端,其中封装了客户端发送http的get和post请求 使用Apache的HttpClient发送GET和POST请求的步骤 ...
- pickle 两个使用小方法
def pickle_load(file_path): f = open(file_path,'r+') data = pickle.load(f) f.close() return data ...
- iview分析
- Linux下scp报Permission denied错误的解决方法
sudo vim /etc/ssh/sshd_config 把PermitRootLogin no改成PermitRootLogin yes如果原来没有这行或被注释掉,就直接加上PermitRootL ...