问题描述

小明每天都要练功,练功中的重要一项是梅花桩。
小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1。
小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上。小明已经练了一段时间,他现在可以一步移动不超过 d 的距离(直线距离)。
小明想知道,在不掉下梅花桩的情况下,自己最少要多少步可以移动到目标。

输入格式

输入的第一行包含两个整数 n, m,分别表示梅花桩的行数和列数。
第二行包含一个实数 d(最多包含一位小数),表示小明一步可以移动的距离。

输出格式

输出一个整数,表示小明最少多少步可以到达目标。

样例输入

3 4
1.5

样例输出

3

评测用例规模与约定

对于 30% 的评测用例,2 <= n, m <= 20,1 <= d <= 20。
对于 60% 的评测用例,2 <= n, m <= 100,1 <= d <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= d <= 100。

思路:

考虑 B F S BFS BFS,将左上角坐标 ( 1 , 1 ) (1,1) (1,1)入队,令 d [ 1 ] [ 1 ] d[1][1] d[1][1] 处为0。不断将队头出队,并将与队头坐标 ( i , j ) (i,j) (i,j)距离 d i s < d dis<d dis<d 的所有坐标入队,并将其坐标对应的 d [ x ] [ y ] d[x][y] d[x][y] 标记为 d [ i ] [ j ] + 1 d[i][j]+1 d[i][j]+1 ,直到队列为空,此时, d [ n ] [ m ] d[n][m] d[n][m] 处即为答案。

但这并不好实现,在找与队头坐标 ( i , j ) (i,j) (i,j)距离 d i s < d dis<d dis<d 的所有坐标的过程中,如果搜索全图,必然TLE,所以我们要尽可能贪心地找最外围的情况,因为搜索的范围是一个圆心在左上角的 1 4 \dfrac {1}{4} 41​圆,所以我们可以采用圆内贪心

先搜索圆的右边界: t y = y + ( i n t ) d ty = y + (int)d ty=y+(int)d(由于不能掉下梅花桩,我们必须取 y + ( i n t ) d y + (int)d y+(int)d为最右的边界),这肯定能到达,之后采取贪心法找边界:我们从上到下去找圆的最右边界(当然是整数点),也就是一直tx ++,但是总会有一个时刻点会超出圆的右边界,这时我们需要缩小点的横坐标,即ty --,直到满足圆内,我们继续tx ++,这样一定能找到所有最外围情况的点

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 1004
int dis[N][N];
int n,m;
double d;
queue< pair<int,int> >q;
void bfs(){q.push(make_pair(1, 1));while(!q.empty()){pair<int,int> t = q.front(); q.pop();int x = t.first, y = t.second;int tx = x, ty = y + (int)d;//先向右移动d if((n-x)*(n-x) + (m-y)*(m-y) <= d*d){dis[n][m] = dis[x][y] + 1;break;}while(tx <= n && ty >= y && ty <= m){if((tx - x) * (tx - x) + (ty - y) * (ty - y) <= d * d && dis[tx][ty] == 0){q.push(make_pair(tx, ty));dis[tx][ty] = dis[x][y] + 1;tx ++;}else ty --;}}cout<<dis[n][m]<<endl;
}
int main(){cin>>n>>m>>d;bfs();return 0;
}

ps.

代码部分借鉴自:蓝桥杯校内模拟赛题解

梅花桩详细分析圆内贪心思路(dfs)相关推荐

  1. Power BI 中 关键影响因素(Key Influencers Visualization)功能详细分析(内附福利)——Power BI迈向AI的一大步?

    目录 写在前面 功能介绍 功能详解 写在最后 写在前面 继解释此增长/下降和分析此分布的不同之处过后,Power BI在2月份又抛出了一枚重磅炸弹--Key Influencers Visualiza ...

  2. 客户端访问https时应无浏览器(含终端)安全警告信息;_https和http有什么区别(内附详细分析)...

    很多站长知道https和http有所不同,但是究竟两者有什么不同浑然不知,针对这种情况,本文Seo星火给大家详细分析一下https和http有什么区别. 一.基本概念: (http服务器-->本 ...

  3. https和http有什么区别(内附详细分析)

    很多站长知道https和http有所不同,但是究竟两者有什么不同浑然不知,针对这种情况,本文给大家详细分析一下https和http有什么区别. 一.基本概念(http服务器–>本地浏览器,正确快 ...

  4. LeetCode#546. 移除盒子 (Python解法+详细分析)

    问题描述: 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个盒子(k &g ...

  5. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  6. HashMap 源码详细分析(JDK1.8)

    1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值 ...

  7. linkedhashmap 顺序_LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  8. 13万字详细分析JDK中Stream的实现原理

    前提 Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的).Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性( ...

  9. 乐鑫esp8266学习rtos3.0笔记第11篇:详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

最新文章

  1. Linux下进程间通信——管道
  2. 深度学习笔记——基于传统机器学习算法(LR、SVM、GBDT、RandomForest)的句子对匹配方法
  3. 单例模式---设计模式
  4. ContentProvider与ContentResolver使用
  5. 美图赏析:拆解USB无线网卡,电路方案非常经典
  6. Elasticsearch 6.x 下载安装
  7. RHEL7/CentOS7 Network Service开机无法启动的解决方法
  8. XML(1):基于流的XML处理
  9. WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL
  10. C语言—黑客数字雨特效
  11. Windows设置开机自启动的三种方式
  12. urlencode与unquote
  13. 良心推荐:某音上最厉害的明日之后房子蓝图设计师都在这里了
  14. 电子认证许可证书(电子签名 需要 什么资质)
  15. python汉明距离检索_【LeetCode 461】汉明距离(Python)
  16. 数据库—distinct是什么意思?select distinct怎么用?
  17. Solr安装配置(包含Tomcat和jdk)
  18. 需不需要懂代码?——软件测试人员
  19. sybase数据库的两种备份方法
  20. vue 公告栏组件

热门文章

  1. Web安全(四)访问控制和业务安全
  2. iOS离线缓存架构设计方案
  3. JS/CSS判断是不是iphoneX?
  4. java 异或加密 字符串_Java 字符串的加密与解密
  5. 3D动画——正方体的旋转与张开
  6. ceph osdmap crush 分析
  7. 在Linux下使用树莓派交叉编译工具编译opencv库并进行移植
  8. 分布式事务框架-TCC
  9. BPTT(BackPropagation Through Time)
  10. 如何在jsp中写一个java方法