Catch him 杭电 2531
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2531
题解 :这个题目的坑就是D的个数,一开始天真的一位就2个,不是这样的,D的数目是不定的。所以我们先找到一个D,让这个D做为头,然后再用一个数组记录其他D与该D的相对位置就好了,然后再BFS判断
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+;
char arr[N][N];
int s1,e1,s2,e2;
int n,m;
int xx,yy;
int mark[N][N];
int bodyx[N];
int bodyy[N];
int pos;
int d[][]={,,,,-,,,-};
struct stu{
int a,b;
int sum;
};
int ans;
bool judge(int x,int y){
if(mark[x][y]) return ;
if(x<||y<||x>=n||y>=m) return ;
if(arr[x][y]=='O') return ;
for(int i=;i<pos;i++){
int dx=bodyx[i]+x;
int dy=bodyy[i]+y;
if(dx<||dy<||dx>=n||dy>=m||dx<||dy<||arr[dx][dy]=='O') return ;
}
return ;
} bool juju(int x,int y){
if(arr[x][y]=='Q') return ;
for(int i=;i<pos;i++){
int dx=x+bodyx[i];
int dy=y+bodyy[i];
if(arr[dx][dy]=='Q') return ;
}
return ;
}
void bfs(int x1,int y){
queue<stu>que;
que.push({x1,y,});
mark[x1][y]=;
while(que.size()){
stu x=que.front();
que.pop();
if(juju(x.a,x.b)){
ans=x.sum;
break;
}
for(int i=;i<;i++){
int dx=x.a+d[i][];
int dy=x.b+d[i][];
if(judge(dx,dy)){
que.push({dx,dy,x.sum+});
mark[dx][dy]=;
}
}
}
}
int main(){
while(cin>>n>>m){
if(n==||m==) break;
memset(mark,,sizeof(mark));
s1=-;
ans=-;
pos=;
for(int i=;i<n;i++) scanf("%s",arr[i]);
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(arr[i][j]=='D'&&s1!=-){
bodyx[pos]=i;
bodyy[pos++]=j;
}
else if(arr[i][j]=='D'){
s1=i,e1=j;
}
}
}
for(int i=;i<pos;i++){
bodyx[i]=bodyx[i]-s1;
bodyy[i]=bodyy[i]-e1;
}
bfs(s1,e1);
if(ans!=-) cout<<ans<<endl;
else cout<<"Impossible"<<endl;
}
return ;
}
Catch him 杭电 2531的更多相关文章
- 杭电ACM分类
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...
- acm入门 杭电1001题 有关溢出的考虑
最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...
- 杭电acm 1002 大数模板(一)
从杭电第一题开始A,发现做到1002就不会了,经过几天时间终于A出来了,顺便整理了一下关于大数的东西 其实这是刘汝佳老师在<算法竞赛 经典入门 第二版> 中所讲的模板,代码原封不动写上的, ...
- 杭电OJ——1198 Farm Irrigation (并查集)
畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...
- 高手看了,感觉惨不忍睹——关于“【ACM】杭电ACM题一直WA求高手看看代码”
按 被中科大软件学院二年级研究生 HCOONa 骂为“误人子弟”之后(见:<中科大的那位,敢更不要脸点么?> ),继续“误人子弟”. 问题: 题目:(感谢 王爱学志 网友对题目给出的翻译) ...
- C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~
暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...
- 杭电ACM2076--夹角有多大(题目已修改,注意读题)
杭电ACM2076--夹角有多大(题目已修改,注意读题) http://acm.hdu.edu.cn/showproblem.php?pid=2076 思路很简单.直接贴代码.过程分析有点耗时间. / ...
- 杭电ACM2092--整数解
杭电ACM2092--整数解 分析 http://acm.hdu.edu.cn/showproblem.php?pid=2092 一个YES,一个Yes.试了10几次..我也是无语了..哪里都不 ...
- 杭电2034——人见人爱A-B
#include <stdio.h> #include <algorithm> using namespace std; int main () { int a[110],b[ ...
随机推荐
- MySQL----DML(增删改表中数据)
##DML:增删改表中的数据 1.添加数据 *语法: * insert into 表名(列名1,列名2,...列名n) values (值1,值2,...值n); *注意: 1.列名和值要一一对应. ...
- CF1324B Yet Another Palindrome Problem 题解
原题链接 CF 127个测试点,好评 简要题意: 多组数据,问数组中是否有长度 \(\geq 3\) 的回文子序列. 我们需要找到本质. 题目不让我们求这个长度,只让我们判断,这是为什么呢? 如果答案 ...
- Java分布式IP限流和防止恶意IP攻击方案
前言 限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足.但是Guava RateLimiter只能应用于单进程,多进程间协同控制便无能为 ...
- 《JavaScript 模式》读书笔记(4)— 函数5
这一篇是函数部分的最后一篇.我们来聊聊Curry化. 十.Curry 这部分我们主要讨论Curry化和部分函数应用的内容.但是在深入讨论之前,我们需要先了解一下函数应用的含义. 函数应用 在一些纯粹的 ...
- 二、sudo su root 和sudo su -的区别
1.使用sudo su root可以快速切换为root用户,输入密码后输pwd可以看到它还是在主目录下即/home/sdbi 显示为:用户名@主机名:/home/sdbi#即root@linux:/h ...
- 总结:自动将函数对象添加到字典的bug
介绍 本文以ATM项目为背景,介绍一个比较实用的编程技巧,使用装饰器将项目中的指定函数添加到字典中. 利用字典通过key访问value的特点,实现用户输入编号,通过字典直接获取并调用编号对应的功能函数 ...
- 四、【Docker笔记】Docker容器
容器是Docker的另一个核心概念,容器就是镜像的一个运行实例,只是它具有一个可写的文件层,而镜像是一个只读的文件. 一.创建容器 1.新建容器 我们可以使用 docker create 命令来创建一 ...
- CTR学习笔记&代码实现2-深度ctr模型 MLP->Wide&Deep
背景 这一篇我们从基础的深度ctr模型谈起.我很喜欢Wide&Deep的框架感觉之后很多改进都可以纳入这个框架中.Wide负责样本中出现的频繁项挖掘,Deep负责样本中未出现的特征泛化.而后续 ...
- B 【ZJOI2007】时态同步
时间限制 : - MS 空间限制 : 265536 KB 评测说明 : 1s 256m 问题描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 ...
- Java 添加、读取和删除 Excel 批注
批注是一种富文本注释,常用于为指定的Excel单元格添加提示或附加信息. Free Spire.XLS for Java 为开发人员免费提供了在Java应用程序中对Excel文件添加和操作批注的功能. ...