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.超文本标记语言的 ...
随机推荐
- transition-分栏按钮动画
=> css: .cateBtn{ position: relative; background: #fff; border: 1px solid #ddd; border-radius: ...
- 解决fixed在苹果手机抖动问题/头部底部固定布局
1.头部和底部固定,中间内容滚动,不涉及fixed 1)absolute与height:100% <!DOCTYPE html><html><head> <m ...
- mysql动态执行sql批量删除数据
CREATE PROCEDURE `sp_delete_pushmsg_data`() BEGIN ); ); declare l_dutyno int; ; ; ; ; day),'%Y-%m-%d ...
- java 异常报错总结
1.java.lang.ArithmeticException:这是算数异常 比如分母位0 2. java.lang.ArrayIndexOutOfBoundsException:数组下标越界异常 3 ...
- Going Home HDU - 1533(最大费用最小流)
On a grid map there are n little men and n houses. In each unit time, every little man can move one ...
- nexus3的安装和使用
参考:https://www.cnblogs.com/2YSP/p/9533506.html http://www.54tianzhisheng.cn/2017/10/14/Nexus3-Maven/ ...
- Python之路【第一篇】:Python基础
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- [HDU3038]How Many Answers Are Wrong(并查集)
传送门 和某题类似,只不过奇偶换成了和. ——代码 #include <cstdio> #include <iostream> #define N 1000001 int n, ...
- 子序列 NYOJ (尺取法+队列+hash) (尺取法+离散化)
子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 给定一个序列,请你求出该序列的一个连续的子序列,使原串中出现的所有元素皆在该子序列中出现过至少1次. 如2 8 ...
- C - 剪花布条
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和 ...