LYK 快跑!(LYK别打我-)(话说LYK是谁)
LYK 快跑!(run)
Time Limit:5000ms Memory Limit:64MB
题目描述
LYK 陷进了一个迷宫! 这个迷宫是网格图形状的。 LYK 一开始在(1,1)位置, 出口在(n,m)。
而且这个迷宫里有很多怪兽,若第 a 行第 b 列有一个怪兽,且此时 LYK 处于第 c 行 d 列,此
时这个怪兽对它的威胁程度为|a-c|+|b-d|。
LYK 想找到一条路径,使得它能从(1,1)到达(n,m),且在途中对它威胁程度最小的怪兽的
威胁程度尽可能大。
当然若起点或者终点处有怪兽时,无论路径长什么样,威胁程度最小的怪兽始终=0。
输入格式(run.in)
第一行两个数 n,m。
接下来 n 行,每行 m 个数,如果该数为 0,则表示该位置没有怪兽,否则存在怪兽。
数据保证至少存在一个怪兽。
输入格式(run.out)
一个数表示答案。
输入样例
3 4
0 1 1 0
0 0 0 0
1 1 1 0
输出样例
1
数据范围
对于 20%的数据 n=1。
对于 40%的数据 n<=2。
对于 60%的数据 n,m<=10。
对于 80%的数据 n,m<=100。
对于 90%的数据 n,m<=1000。
对于另外 10%的数据 n,m<=1000 且怪兽数量<=100。
思路:
读完题目我以为这是一道DP题
而且DP方程都想好了大半
然而一看时间5000ms
着实吃了一惊
这时间不写搜索简直对不起出题人
对于这种输出最大ans的题
可以写记忆化搜索,但是作为蒟蒻的我代码能力不行
所以写了一个bfs
写完bfs以后又加了一个二分答案
bfs是用来处理每个点的威胁值
就是把所有的怪兽的坐标都记录然后入队
这样处理
二分答案处理ans
每二分出一个答案就进行一遍判定
看这个答案是否可行
可行就记录然后将左边界上调
不行就将右边界下调
指导左右边界交叉
输出最后ans
注意!
记录怪兽的数组必须开大
不然第9个点就wa了
我可是被坑过的人;
来,上代码:
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream> using namespace std; struct node {
int x,y,dis;
};
struct node cur; const int dx[]={,-,,,};
const int dy[]={,,,,-}; int l=,r=,ans;
int gx[],gy[],head=;
int n,m,map[][],pd[][]; void bfs()
{
queue<struct node>q;
for(int i=;i<=head;i++) cur.x=gx[i],cur.y=gy[i],cur.dis=i,pd[cur.x][cur.y]=cur.dis,q.push(cur);
while(!q.empty())
{
for(int i=;i<=;i++)
{
cur=q.front();
if(cur.x+dx[i]<=n&&cur.x+dx[i]>&&cur.y+dy[i]>&&cur.y+dy[i]<=m)
{
if(pd[cur.x+dx[i]][cur.y+dy[i]]==)
{
pd[cur.x+dx[i]][cur.y+dy[i]]=cur.dis;
cur.x+=dx[i],cur.y+=dy[i];
map[cur.x][cur.y]=fabs(gx[cur.dis]-cur.x)+fabs(gy[cur.dis]-cur.y);
q.push(cur);
}
}
}
q.pop();
}
} bool check(int now)
{
memset(pd,,sizeof(pd));
queue<struct node>q;
if(map[][]<now) return false;
cur.x=,cur.y=;
pd[][]=;
q.push(cur);
while(!q.empty())
{
for(int i=;i<=;i++)
{
cur=q.front();
if(cur.x+dx[i]<=n&&cur.x+dx[i]>&&cur.y+dy[i]<=m&&cur.y+dy[i]>)
{
cur.x+=dx[i],cur.y+=dy[i];
if(pd[cur.x][cur.y]==&&map[cur.x][cur.y]>=now)
{
if(cur.x==n&&cur.y==m) return true;
pd[cur.x][cur.y]=;
q.push(cur);
}
}
}
q.pop();
}
return false;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]==)
{
head++;
gx[head]=i;
gy[head]=j;
map[i][j]=;
}
}
}
bfs();
while(l<=r)
{
int mid=(l+r)/;
if(check(mid))
{
ans=mid;
l=mid+;
}
else r=mid-;
}
cout<<ans<<endl;
return ;
}
LYK 快跑!(LYK别打我-)(话说LYK是谁)的更多相关文章
- LYK 快跑!(run)
LYK 快跑!(run)Time Limit:5000ms Memory Limit:64MB[题目描述] LYK 陷进了一个迷宫! 这个迷宫是网格图形状的. LYK 一开始在(1,1)位置, 出口在 ...
- 原创跑酷小游戏《Cube Duck Run》 - - 方块鸭快跑
自从unity5出来才开始关注unity,业余时间尝试做了个小游戏: <方块鸭快跑> (Cube Duck Run) 像素风,3d视角,色彩明快,有无尽和关卡两种模式. 应用连接: goo ...
- 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...
- Cocos2dx系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)
懒骨头(http://blog.csdn.com/iamlazybone) 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张 ...
- canvas小程序-快跑程序员
canvas不用说html5带来的好东西,游戏什么的,么么哒 记得有一天玩手机游戏,就是一个跳跃过柱子那种,其实元素很简单啊,app能开发,借助html5 canvas也可以啊, 于是就开始了. -- ...
- 小步快跑的公司可以最简化操作直接通过log4net将日志写入ElasticSearch
很多小步快跑的公司,开发人员多则3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期 项目不稳定,bug又多,每次都跑到生产去找日志 ...
- 神龟快跑,2016做的一款UWP游戏
神龟快跑,2016做的一款UWP游戏, 实际是H5页面, 用LAYA转AS3得到的 安装地址 https://www.microsoft.com/zh-cn/store/p/神龟快跑/9nblggh4 ...
- 静态分析第三发 so文件分析(小黄人快跑)
本文作者:i春秋作家——HAI_ 0×00 工具 1.IDA pro 2.Android Killer 0×01 环境 小黄人快跑 下载地址http://download.csdn.net/downl ...
- BZOJ4829: [Hnoi2017]队长快跑
BZOJ4829: [Hnoi2017]队长快跑 Description 众所周知,在P国外不远处盘踞着巨龙大Y. 传说中,在远古时代,巨龙大Y将P国的镇国之宝窃走并藏在了其巢穴中,这吸引着整个P国的 ...
随机推荐
- mysql服务器io等待高定位与分析
这两天发现公司好几台阿里云ECS上的mysql生产服务器繁忙期间io等待高达百分之二三十(估计九成是没有write back),而且确定是mysql进程产生,由于跑的应用过多,开发和维护无法直接确定哪 ...
- 2004-输入一个百分制的成绩t,将其转换成对应的等级
,具体转换规则如下: 90~100为A; 80~89为B; 70~79为C; 60~69为D; 0~59为E; 如果输入数据不在0~100范围内,请输出一行:“Score is error!”. 这题 ...
- An unexpected error has occurred" error appears when you try to create a SharePoint Enterprise Search Center on a Site Collection
The Enterprise Search Center requires that the Publishing feature be enabled. To enable the Publishi ...
- Opengles 管线编程介绍
OpenGL ES 2.0可编程管道 上图橙色部分(Vertex Shader和Fragment Shader)为此管道的可编程部分.整个管道包含以下两个规范: 1) OpenGL ...
- Universal-Image-Loader完全解析(上)
Universal-Image-Loader完全解析(上) 基本介绍及使用 大家平时做项目的时候,或多或少都会接触到异步加载图片,或者大量加载图片的问题,而加载图片时候经常会遇到各种问题,如oom,图 ...
- 实战1--应用EL表达式访问JavaBean的属性
(1)编写index.jsp页面,用来收集用户的注册信息 <%@ page language="java" pageEncoding="GBK"%> ...
- STL--迭代器(iterator)
指针与数组 指针与其它数据结构呢?比如说链表? 存储空间是非连续的.不能通过对指向这种数据结构的指针做累加来遍历. 能不能提供一个行为类似指针的类,来对非数组的数据结构进行遍历呢?这样我们就能够以同样 ...
- MyBatis入门(五)---延时加载、缓存
一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...
- 基础学习day07---面向对象三---继承,接口与 抽象类
一.继承 1.1.继承概念 将对象的共性抽取出来.提取出一个单独的类. 继承使用复用以前的代码非常容易,能够大大的缩短开发周期,降低开发成本,同时增加程序的易维护性 继承使重一个类A能够直接使用另外一 ...
- 【原】iOS动态性(一):动态添加属性的方法——关联(e.g. 向Category添加属性)
想到要如何为所有的对象增加实例变量吗?我们知道,使用Category可以很方便地为现有的类增加方法,但却无法直接增加实例变量.不过从Mac OS X v10.6开始,系统提供了Associative ...