HDU 4528 小明系列故事――捉迷藏
广搜。
根据题意,可以知道状态总共有$4*n*m$种。每一个位置四种状态:两个都没有发现;发现$E$没发现$D$;发现$D$没发现$E$;两个都发现。
每次移动的花费都是$1$,队列里面状态的费用是单调不减的,所以第一次符合要求的位置就是答案。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<ctime>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
char c = getchar();
x = ;
while(!isdigit(c)) c = getchar();
while(isdigit(c))
{
x = x * + c - '';
c = getchar();
}
} int T,n,m,t;
char s[][];
int sx,sy,ex,ey,dx,dy;
int dir[][]={ {-,},{,},{,-},{,} };
int f[][][];
int dis[][][];
int flag; struct X
{
int a,b,st;
X(int A,int B,int ST)
{
a=A;
b=B;
st=ST;
}
}; bool check(int a,int b)
{
if(a<||a>=n) return ;
if(b<||b>=m) return ;
if(s[a][b]!='.') return ;
return ;
} void bfs()
{
queue<X>Q; int st=f[][sx][sy]*(<<)+f[][sx][sy]*(<<);
Q.push(X(sx,sy,st)); dis[sx][sy][st]=; while(!Q.empty())
{
X h=Q.front(); Q.pop();
if(h.st==)
{
if(dis[h.a][h.b][h.st]<=t)
{
printf("%d\n",dis[h.a][h.b][h.st]);
flag=;
}
return ;
} for(int i=;i<;i++)
{
int tx=h.a+dir[i][],ty=h.b+dir[i][];
if(check(tx,ty)==) continue;
int tst = h.st;
if(f[][tx][ty]==) tst=tst|(<<);
if(f[][tx][ty]==) tst=tst|(<<);
if(dis[tx][ty][tst]!=0x7FFFFFFF) continue; dis[tx][ty][tst]=dis[h.a][h.b][h.st]+;
Q.push(X(tx,ty,tst));
} }
} int main()
{
scanf("%d",&T); int cas=;
while(T--)
{
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<n;i++) scanf("%s",s[i]); for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(s[i][j]=='S') sx=i,sy=j;
if(s[i][j]=='E') ex=i,ey=j;
if(s[i][j]=='D') dx=i,dy=j; for(int k=;k<;k++) dis[i][j][k]=0x7FFFFFFF;
f[][i][j]=f[][i][j]=;
}
} s[sx][sy]='.'; for(int k=;k<=;k++)
{
int a,b;
for(int i=;i<;i++)
{
if(k==) a=ex,b=ey;
else a=dx,b=dy;
for(int j=;;j++)
{
a=a+dir[i][], b=b+dir[i][];
if(check(a,b)==) break;
f[k][a][b]=;
}
}
} printf("Case %d:\n",cas++);
flag=; bfs();
if(flag==) printf("-1\n");
}
return ;
}
HDU 4528 小明系列故事――捉迷藏的更多相关文章
- HDU 4828 小明系列故事——捉迷藏
漂亮妹子点击就送:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others) Memo ...
- HDU 4528 BFS 小明系列故事——捉迷藏
原题直通车:HDU 4528 小明系列故事——捉迷藏 分析: 标记时加两种状态就行. 代码: #include<iostream> #include<cstring> #inc ...
- C - 小明系列故事――捉迷藏 HDU - 4528 bfs +状压 旅游-- 最短路+状压
C - 小明系列故事――捉迷藏 HDU - 4528 这个题目看了一下题解,感觉没有很难,应该是可以自己敲出来的,感觉自己好蠢... 这个是一个bfs 用bfs就很好写了,首先可以预处理出大明和二明能 ...
- hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 4542 小明系列故事——未知剩余系
小明系列故事——未知剩余系 题意:操作0表示某数有n个约数,操作1为某数有n个非约数:n <= 47777,若是存在小于2^62的数符合,则输出该数,否则若是不存在输出Illegal,若是大于2 ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- hdu 4542 小明系列故事——未知剩余系 反素数 + 打表
小明系列故事——未知剩余系 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Prob ...
- hdu4528 小明系列故事——捉迷藏
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s ...
随机推荐
- hdu 1856 More is better (并查集)
More is better Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others) ...
- 【题解】HAOI2012高速公路
一节政治课的结果……推式子+推式子+推式子…… 首先注意到一个区间里面,选择(x, y)和(y, x)的费用是一样的.所以我们把这两种情况合为一种,那么现在询问的区间为(l, r),则一共的情况就有 ...
- [洛谷P3567][POI2014]KUR-Couriers
题目大意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半.有,输出这个数,否则输出$0$ 题解:主席树,查询区间第$\bigg\lfloor\dfrac{len+1}{2}\bigg\rf ...
- 【NOIP模拟赛】黑红树 期望概率dp
这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...
- 免费的dns服务器(更换dns服务器有时可以解决某些网站(如爱奇艺访问不了的问题))
首先百度提供的dns就是非常好用的dns,小编就把百度的dns作为首选180.76.76.76. 其次是阿里提供的dns223.5.5.5,响应速度非常的快,而且没有广告劫持. 再就是最通用的 ...
- [SCOI2007] 蜥蜴 (最大流)
[SCOI2007] 蜥蜴 题目背景 07四川省选 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1 ...
- 用npm安装express时报proxy的错误的解决方法
首先要说明一点:当使用npm install <module-name>时安装组件时,安装的目录是cmd的目录+node_modules+组件名 例子如下:假如你现在安装express这个 ...
- 7月24号day16总结
一开始显示出现问题,js路径不能应用,因为用的是springMVC框架书写,所以有路径的保护和静态引用地址时需要注意的地方 今天进行了最后项目的优化,包括map清洗数据部分的代码和echarts显示的 ...
- windows下maven打包eclipse工程
打包过程中,可能出现的2个问题: ①.[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build ...
- iOS 之持久化存储 plist、NSUserDefaults、NSKeyedArchiver、数据库
1.什么是持久化? 本人找了好多文章都没有找到满意的答案,最后是从孙卫琴写的<精通Hibernate:Java对象持久化技术详解>中,看到如下的解释,感觉还是比较完整的.摘抄如下: 狭义的 ...