水灾(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.
Output
6
代碼實現:
人和水都是四方向移動。別墅的效果等於石頭,都可以攔截洪水。
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,qsl,qrl,zh,zl,a,b,c,nh,nl;
int qs[][][],qr[][][];//qs存洪水的啟發點,qr存人的。
int hb[]={,,,-},lb[]={,-,,};//洪水和人的四方向移動。
bool map[][],rj[][];//map標記的點,洪水不能走,人也不能走。rj(路徑)標記的點,人不能走。
char ch;
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
cin>>ch;
if(ch=='X') map[i][j]=;
if(ch=='*'){qs[][qsl][]=i;qs[][qsl++][]=j;map[i][j]=;}
if(ch=='S'){qr[][qrl][]=i;qr[][qrl++][]=j;rj[i][j]=;}
if(ch=='D'){zh=i;zl=j;map[i][j]=;}
}
for(int ans=;;ans++){
if(!qrl) break;
b=(ans+)%;c=ans%;//因為洪水和人的啟發點要各用兩個隊列存。
for(int i=;i<qsl;i++){//雖然說是人先走,但走到一個會在離開前會被洪水淹沒的地方有什麼用。
for(int j=;j<;j++){
nh=qs[b][i][]+hb[j];nl=qs[b][i][]+lb[j];
if(!map[nh][nl]&&nh>&&nh<=n&&nl>&&nl<=m){
map[nh][nl]=;
qs[c][a][]=nh;qs[c][a++][]=nl;//存入洪水的隊列。
}
}
}
qsl=a;a=;//qsl存的是洪水的啟發點個數。
for(int i=;i<qrl;i++){
for(int j=;j<;j++){
nh=qr[b][i][]+hb[j];nl=qr[b][i][]+lb[j];
if(nh==zh&&nl==zl){printf("%d\n",ans);return ;}//要在外面,因為別墅約等於石頭。
if(!rj[nh][nl]&&!map[nh][nl]&&nh>&&nh<=n&&nl>&&nl<=m){//有洪水,石頭,別墅(霧)和之前走過的地方不能走了。
rj[nh][nl]=;
qr[c][a][]=nh;qr[c][a++][]=nl;//存入人的隊列。
}
}
}
qrl=a;a=;//qrl存的是人的啟發點個數。
}
printf("ORZ hzwer!!!\n");
return ;
}
水灾(sliker.cpp/c/pas) 1000MS 64MB的更多相关文章
- T4870 水灾(sliker.cpp/c/pas) 1000MS 64MB
题目描述 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表 ...
- 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB
众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一 ...
- T4869 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB
题目描述 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe ...
- 水灾 1000MS 64MB (广搜)
水灾(sliker.cpp/c/pas) 1000MS 64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY ...
- 洛谷——P2071 座位安排 seat.cpp/c/pas
P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...
- 2012_p2 寻宝 (treasure.cpp/c/pas)
2012_p2 寻宝 (treasure.cpp/c/pas) 时间限制: 1 Sec 内存限制: 128 MB提交: 23 解决: 9[提交][状态][讨论版][命题人:外部导入] 题目描述 2 ...
- 2012_p1 质因数分解 (prime.cpp/c/pas)
2012_p1 质因数分解 (prime.cpp/c/pas) 时间限制: 1 Sec 内存限制: 128 MB提交: 80 解决: 27[提交][状态][讨论版][命题人:外部导入] 题目描述 ...
- 模拟赛 Problem 3 经营与开发(exploit.cpp/c/pas)
Problem 3 经营与开发(exploit.cpp/c/pas) [题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXpl ...
- 模拟赛 Problem 2 不等数列(num.cpp/c/pas)
Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有 ...
随机推荐
- 自定义cursor
cursor: url('绝对路径/big.cur'),auto; //通用方式
- subline快捷键
折叠所有代码: 按ctrl+k,再按ctrl+1 展开所有代码: 按ctrl+k,再按ctrl+j 折叠此处代码: ctrl+shift+[ 展开此处代码: ctrl+shift+]
- 恢复drop数据
select * from recyclebin r where r.original_name = 'MSM_EXAINVITEBIDSCHEMEHEAD' ; flashback table MS ...
- php可变变量
例子: <?php $a = "b"; $$a = "c"; echo $$a; echo "<br>"; echo $b ...
- == 和 isEqualToString的区别之备忘
== 比较的是指针 isEqualToString 比较的是指针指向的内容 比如: NSString * strA = @"abc"; NSString * strB = @&qu ...
- jQuery 元素遍历
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 给伪类设置z-index= -1;
.column{ position: relative; float: left; padding: 30px 0; width: 25%; z-index: 0; background-color: ...
- RabbitMQ、Redis
进程QUEUE,可以是父进程与子进程间进行交互,也可以是同属于一个父进程的子进程间的交互:如果要实现进程A与进程B之间的通信,就需要借助一个中间进程了,我们习惯称为消息队列. QQ无法直接与WORD通 ...
- BZOJ 1912 巡逻
重赋边权. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm& ...
- MATLAB连接MySQL数据库
今天开始看<MATLAB数据分析与挖掘实战>,学习了下用MATLAB连接MySQL数据库,环境win7,32bit,MySQL5.7.12,MATLAB2013B 首先,从这里下载驱动的压 ...