hrbust - 2239
|
||||||
| Description | ||||||
|
鹿丸看见了一个胖子。 “胖子!” “啊?” 胖子转身,面对面发现站着的鹿丸。奇怪之于,他突然发现自己的脚动不了了。原来他中了鹿丸的影子模仿术。 “你想干嘛?”胖子怒吼。 “我想采访你一下,来,过来”。说着,鹿丸向前走去。胖子发现自己的行动被鹿丸控制了,鹿丸向前走,他也向前走。鹿丸左转,他也左转。 “叫我过去就过去?”胖子一生气,只听见duang的一声,天崩地裂,凭空从地上出现几座大山,不能通行。而此时,胖子和鹿丸的位置也被震的发生了变化,但是影子模仿术没被解除。此时两人一人面向东方,一人面向西方。 鹿 丸不料胖子有这等能耐。不过这下可费神了,怎么走到胖子旁边 呢?鹿丸往前走,胖子也会往前走,鹿丸不能往一个障碍物前进,但如果鹿丸前进时,胖子前进的位置是障碍物,那么胖子会狠狠的撞上去,不过实际的位置并不会 变化。注意,这里说的前是相对的,两人面向何方,那么前就是何方。当然,无论何时,鹿丸只要转向,胖子也会跟着转。 但是现在地形这么复杂,鹿丸需要思考一下,要怎么走才能用最少的步数让自己和胖子走到同一个地方,或者相邻也可以。毕竟和胖子挤一个地方还是挺憋屈的。 |
||||||
| Input | ||||||
| 多组测试数据 每组测试数据第一行有两个数N,M (2<= N <= 20, 2 <= M <= 20) 表示场地的大小。 接下来有N行,每行有M个字符。描述场地的状态。其中'X'表示障碍,'P'表示胖子,'L'表示鹿丸。 |
||||||
| Output | ||||||
| 对于每组数据,输出最小的总步数。如果不能相见,则输出"Smart PangZi!" | ||||||
| Sample Input | ||||||
| 3 3 PXL ... ... 3 3 PX. ... .XL |
||||||
| Sample Output | ||||||
| 3 2 |
||||||
| Hint | ||||||
|
多提供几组样例数据 Input: 3 3 P.. L.. ... 3 3 XPX L.. ... 3 3 PXL .X. ... 3 3 PX. ..X L.. Output: 0 1 5 1 |
||||||
| Source | ||||||
| 哈尔滨理工大学第五届ACM程序设计竞赛(热身) |
/** **/
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<cmath>
#include<string.h>
#include<queue>
#define maxn 25
using namespace std;
char ch[maxn][maxn];
int vis[maxn][maxn][maxn][maxn];
int n,m;
bool prime =false;
int tx[] = {,,,-};
int ty[] = {-,,,};
int dx[] = {,,-,};
int dy[] = {,-,,}; ///上 下 左 右
struct Node
{
int x1;
int y1;
int x2;
int y2;
int step;
Node()
{
x1 = ;
y1= ;
x2 = ;
y2 = ;
step = ;
}
} start;
//struct cmp
//{
// bool operator() (const Node a,const Node b)const
// {
// return ((a.x1 - a.x2) *(a.x1 - a.x2) +(a.y2 - a.y1)*(a.y2 - a.y1) > (b.x1 - b.x2) *(b.x1 - b.x2) +(b.y2 - b.y1)*(b.y2 - b.y1));
// }
//};
int check(int x1,int y1)
{
if(x1 >= && x1 <n && y1 >= && y1 <m) return ;
return ;
}
double solve(Node a)
{
return (a.x1 - a.x2) *(a.x1 - a.x2) +(a.y2 - a.y1)*(a.y2 - a.y1);
}
queue<Node>que;
int bfs()
{
while(!que.empty()) que.pop();
Node tmp,now;
vis[start.x1][start.y1] [start.x2][start.y2]= ;
start.step = ;
Node temp;
que.push(start);
while(!que.empty())
{
now = que.front();
que.pop();
int tt = solve(now);
if(tt == || tt == )
{
return now.step;
}
for(int i=; i<; i++)
{
temp.x1 = now.x1 + dx[i];
temp.y1 = now.y1+ dy[i];
if(temp.x1 < || temp.x1 >= n || temp.y1 < || temp.y1 >= m || ch[temp.x1][temp.y1] == 'X') continue;
int u = now.x2 + tx[i];
int v = now.y2 + ty[i];
if(u < || u>=n || v < || v >=m || ch[u][v] == 'X')
{
temp.x2 = now.x2;
temp.y2 = now.y2;
}
else
{
temp.x2 = u;
temp.y2 = v;
}
temp.step = now.step + ;
if(vis[temp.x1][temp.y1][temp.x2][temp.y2] == )
{
vis[temp.x1][temp.y1][temp.x2][temp.y2] = ;
que.push(temp);
}
}
}
return -;
}
int main()
{
//#ifndef ONLINE_JUDGE
// freopen("in.txt","r",stdin);
//#endif // ONLINE_JUDGE
while(~scanf("%d %d",&n,&m))
{
for(int i=; i<n; i++)
{
scanf("%s",ch[i]);
for(int j=; j<m; j++)
{
if(ch[i][j] == 'P')
{
start.x2 = i;
start.y2 = j;
}
else if(ch[i][j] == 'L')
{
start.x1 = i;
start.y1 = j;
}
}
}
memset(vis,,sizeof(vis));
int res = bfs();
if(res == -) printf("Smart PangZi!\n");
else printf("%d\n",res);
}
return ;
}
hrbust - 2239的更多相关文章
- poj 2239 二分图最大匹配,基础题
1.poj 2239 Selecting Courses 二分图最大匹配问题 2.总结:看到一个题解,直接用三维数组做的,很巧妙,很暴力.. 题意:N种课,给出时间,每种课在星期几的第几节课上 ...
- poj 2239 Selecting Courses(二分匹配简单模板)
http://poj.org/problem?id=2239 这里要处理的是构图问题p (1 <= p <= 7), q (1 <= q <= 12)分别表示第i门课在一周的第 ...
- 动态规划(背包问题):HRBUST 1377 金明的预算方案
金明的预算方案 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行 ...
- [POJ] 2239 Selecting Courses(二分图最大匹配)
题目地址:http://poj.org/problem?id=2239 Li Ming大学选课,每天12节课,每周7天,每种同样的课可能有多节分布在不同天的不同节.问Li Ming最多可以选多少节课. ...
- [ An Ac a Day ^_^ ] hrbust 2291 Help C5 分形
开博客这么久从来没写过自己学校oj的题解 今天写一篇吧 嘿嘿 原题链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProble ...
- hrbust 2384 相同的不相同的字符串
Description 研究证明,汉的字阅读序顺是不会影响你明白这句话的意思的. 但是如果顺序差的太多也是会影响的,比如汉阅读顺的序字你就看不懂什么意思了. 那么多少算多呢?科学家芦苇给出证明,当两个 ...
- HRBUST - 2358 Magic network
HRBUST - 2358 思路:dfs序 + 树状数组 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimiz ...
- POJ 3660 Cow Contest / HUST 1037 Cow Contest / HRBUST 1018 Cow Contest(图论,传递闭包)
POJ 3660 Cow Contest / HUST 1037 Cow Contest / HRBUST 1018 Cow Contest(图论,传递闭包) Description N (1 ≤ N ...
- HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树)
HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树) Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...
随机推荐
- BZOJ3437 小P的牧场 【斜率优化dp】
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1502 Solved: 836 [Submit][Status][Disc ...
- 20165218 2017-2018-1《Java程序设计》第二周学习总结
20165218 2017-2018-1 <Java程序设计>第2周学习总结 教材学习内容总结 Ch2 基本数据类型与数组 Unicode字符集之中所有都叫做"字母", ...
- 学习web安全之--初识安全
随笔:随着互联网行业的飞速发展,互联网行业可谓日新月异,然而在繁华的背后,大多的互联网公司对于网络安全还是处于无重视,不作为的阶段,而作为一个程序员,如果也对信息安全视而不见的话,那将是这个公司的噩梦 ...
- 剑桥offer系列(1~10)
1.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:从左下开始, ...
- sublime Text 块编辑方法
比如我们要把SQL语句中的多表查询结果封装成pojo SQL: SELECT a.id, a.title, a.sell_point, a.price, a.image, b.`name` categ ...
- Codeforces Round #547 (Div. 3) 题解
Codeforces Round #547 (Div. 3) 题目链接:https://codeforces.com/contest/1141 A,B咕咕了... C. Polycarp Restor ...
- 数据分析侠A的成长故事
数据分析侠A的成长故事 面包君 同学A:22岁,男,大四准备实习,计算机专业,迷茫期 作为一个很普通的即将迈入职场的他来说,看到周边的同学都找了技术开发的岗位,顿觉自己很迷茫,因为自己不是那么喜欢钻 ...
- SQL Server作业没有执行的解决方法
SQL Server作业没有执行的解决方法 确保SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 我的电脑--控制面板--管理工具--服务--右键 SQLSE ...
- div模拟textarea在ios下不兼容的问题解决
今天发现一个好东西,赶紧记下来,我在用textarea的时候,想要自适应高度,这样就不会出现滚动条.网上找了很多,都是用div模拟的,但是好扯淡,div模拟的在ios下不能聚焦并且不能输入.真坑... ...
- [洛谷P1822] 魔法指纹
洛谷题目连接:魔法指纹 题目描述 对于任意一个至少两位的正整数n,按如下方式定义magic(n):将n按十进制顺序写下来,依次对相邻两个数写下差的绝对值.这样,得到了一个新数,去掉前导0,则定义为ma ...

