NYOJ999 师傅又被妖怪抓走了
只记得当下的眼疼 , ok 各种数据也试了 , 就是 他娘的不对 , 我也是醉了 . 也是日了最野的狗
附上日了哮天犬的代码 , 这个题 先放放, 一段时间后再试试 , 明天开始状态压缩吧 .为期两天
今天早上 一眼就看出来了 代码的 漏洞 , 以后应该 自己想不出来的代码 让别人看看 , 互相交换着看看
预处理 + 两重广搜
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std;
int n,m,b[][]={,-,,,-,,,},minn,visited[][],vis[][];
char a[][];
struct monkey
{
int x,y,step;
};
queue<monkey>Q;
void pretreatment(int x,int y,char b,char c) //坐标 和 该名称 和 另一人名称
{
for(int i=x+;i<m&&a[y][i]!='X'&&a[y][i]!=c;i++)
a[y][i]=(a[y][i]=='d'?'O':b+);
for(int i=x-;i>=&&a[y][i]!='X'&&a[y][i]!=c;i--)
a[y][i]=(a[y][i]=='d'?'O':b+);
for(int i=y+;i<n&&a[i][x]!='X'&&a[i][x]!=c;i++)
a[i][x]=(a[i][x]=='d'?'O':b+);
for(int i=y-;i>=&&a[i][x]!='X'&&a[i][x]!=c;i--)
a[i][x]=(a[i][x]=='d'?'O':b+);
}
queue<monkey>W;
void BFSMORE(int x,int y,int step,char c)
{
monkey q={x,y,step};
W.push(q);
while(!W.empty())
{
monkey e=W.front();
W.pop();
for(int i=;i<;i++)
{
q.x=e.x+b[i][],q.y=e.y+b[i][];
if(a[q.y][q.x]!='X'&&a[q.y][q.x]!='D'&&a[q.y][q.x]!='E'&&q.x>=&&q.x<m&&q.y>=&&q.y<n&&!vis[q.y][q.x])
{
vis[q.y][q.x]=;
q.step=e.step+;
W.push(q);
if(a[q.y][q.x]==c||a[q.y][q.x]=='O')
{
minn=minn>q.step?q.step:minn;
while(!W.empty())
W.pop();
break;
}
}
}
}
}
void BFS(int x,int y)
{
monkey q={x,y,};
if(a[y][x]=='O')
{
minn=;
return ;
}
if(a[y][x]=='d')
{
memset(vis,,sizeof(vis));
BFSMORE(x,y,,'e');
}
if(a[y][x]=='e')
{
memset(vis,,sizeof(vis));
BFSMORE(x,y,,'d');
}
Q.push(q);
while(!Q.empty())
{
monkey e=Q.front();
Q.pop();
for(int i=;i<;i++)
{
q.x=e.x+b[i][],q.y=e.y+b[i][];
if(a[q.y][q.x]!='X'&&a[q.y][q.x]!='D'&&a[q.y][q.x]!='E'&&q.x>=&&q.x<m&&q.y>=&&q.y<n&&!visited[q.y][q.x])
{
q.step=e.step+;
Q.push(q);
visited[q.y][q.x]=;
if(a[q.y][q.x]=='O')
{
minn=minn>q.step?q.step:minn;
}
if(a[q.y][q.x]=='d')
{
memset(vis,,sizeof(vis));
BFSMORE(q.x,q.y,q.step,'e');
}
if(a[q.y][q.x]=='e')
{
memset(vis,,sizeof(vis));
BFSMORE(q.x,q.y,q.step,'d');
}
}
}
}
}
int main()
{
int sx,sy,dx,dy,ex,ey,t,count1=;
while(scanf("%d%d%d",&n,&m,&t)!=EOF)
{
minn=t+;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
scanf(" %c",&a[i][j]);
if(a[i][j]=='S')
{
sx=j;
sy=i;
}
if(a[i][j]=='D')
{
dx=j;
dy=i;
}
if(a[i][j]=='E')
{
ex=j;
ey=i;
}
}
}
pretreatment(dx,dy,'D','E');
pretreatment(ex,ey,'E','D');
memset(visited,,sizeof(visited));
visited[sy][sx]=;
BFS(sx,sy);
printf("Case %d:\n",++count1);
if(minn<=t)
printf("%d\n",minn);
else
printf("-1\n");
}
return ;
}
NYOJ999 师傅又被妖怪抓走了的更多相关文章
- nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)
题目999 题目信息 执行结果 本题排行 讨论区 师傅又被妖怪抓走了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝 ...
- nyoj 999——师傅又被妖怪抓走了——————【双广搜】
师傅又被妖怪抓走了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥餐渴饮,悟 ...
- openjudge 大师兄,师傅被妖怪抓走啦
描述 孙悟空听到沙僧大喊一句:“大师兄,师傅被妖怪抓走啦!”于是孙悟空直追白骨精而去.孙悟空在一条长度为L的森林小路上飞奔,上面有L+1个整点,依次为0,1,2……L.白骨精会使用一种大范围的攻击法术 ...
- shu_1548 悟空问题(大哥,主妖怪抓走的朋友!)
http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=17 分析: 直接暴力了.. . 代码: #include <s ...
- fzu2172 字符串dp
F - 巡了南山我巡北山 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- ZOJ3640Help Me Escape(师傅逃亡系列•一)(数学期望||概率DP)
Background If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
- FACTORY设计模式【让吃货也能理解的程序】
一个人要有思想,技术再牛的人,如果没有一点点文化气氛,那么也是个码农,不能追到女朋友滴. 我这个人文化真心不多,但是比较喜欢读古诗文.虽然读完之后,记在脑海里的不多,不过,就讨一个喜欢[读]. Lee ...
- HTML学习笔记《一》 ---- HTML基本认识
HTML 基本认识 一.简介 1.HTML是超文本标记语言,标准通用标记语言下的一个应用,解释性语言. 2.“超文本”就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 3.超文本标记语言的 ...
随机推荐
- CDR如何使用钢笔工具进行完美抠图?【6·18特惠倒计时!】
不要以为抠图只能在图像处理软件中实现,矢量图形绘制软件CorelDRAW一样可以,而且方法很多,文章介绍使用CDR钢笔工具抠图的方法. 提示说明: 首先说明一下,CDR中的钢笔工具和其他平面设计软件中 ...
- AcRxClass::addX
AcRxClass::addX函数 virtual AcRxObject * addX( AcRxClass* pProtocolClass, AcRxObject* pProtocolObject) ...
- enote笔记语言(4)
what:我想知道某个“关键词(keyword)”(即,词语,可以是概念|专业术语|.......)的定义. why:我想知道事物发生的原因:我会不会犯“归因错误”?是“单因素”的还是“多因素”的原因 ...
- OI数学知识清单
OI常用的数学知识总结 本文持续更新…… 总结一下OI中的玄学知识 先列个单子,(from秦神 数论 模意义下的基本运算和欧拉定理 筛素数和判定素数欧几里得算法及其扩展[finish] 数论函数和莫比 ...
- 4.bool组合查询
主要知识: 学习bool组合查询 bool嵌套 1.搜索发帖日期为2017-01-01,或者帖子ID为XHDK-A-1293-#fJ3的帖子,同时要求帖子的发帖日期绝对不为2017-01-02 ...
- Yii2开发技巧 使用类似闭包的方式封装事务
在控制器中执行事务的时候,一般的代码如下: $transaction = Yii::$app->db->beginTransaction(); try { //一些业务代码 $transa ...
- hdu 5176 The Experience of Love
The Experience of Love Accepts: 11 Submissions: 108 Time Limit: 4000/2000 MS (Java/Others) Memor ...
- Bitvise ssh client+ chrome +SwitchyOmega *** (xjl456852原创)
首先这个比ss还要简单,ss还需要在vps上搭建服务器.这个不需要. 但是无论是ss 还是 bitvise 都需要有一个自己的vps才行. 首先打开Bitvise ssh client程序: ...
- CDOJ 889 Battle for Silver
Battle for Silver Time Limit: 2999/999MS (Java/Others) Memory Limit: 65432/65432KB (Java/Others) ...
- Jzzhu and Numbers
Jzzhu and Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...