首先肯定不是直接按xy跳,因为会有几个特殊位置:

(0,0)到(1,1)

(0,0)到(1,0)

(0,0)到(4,4)

正常逼近是那长距离跳2,短距离跳1,但在这几个类似的点上是不行的

首先,一定会有一段两个坐标都逼近的一部分,而且还很多

都逼近的话,一定是当前位置最优解,但只逼近的话,当前位置不一定能落在目标点上

通过手玩可以发现,这种情况,离目标点的距离已经非常近,在考虑接下来怎么走,实际上也可以考虑成从哪里出发,能正好通过逼近到达目标点,实际上这两个问题是等价的

所以就相当于把逼近之外比较巧妙的部分用枚举法处理完,直接逼近判断就可以了

码:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#include<cstring>
using namespace std;
queue<int>qxx,qyy,ff;
int xx,yy,i,j,xxxx,yyyy,ans=199999999,lxx,lyy,lff;
bool b[404][404];
int check(int xx,int yy)
{int lin=0;
if(xx<yy)swap(xx,yy);
if(xx>=yy*2)
{lin+=yy;xx-=2*yy;yy=0;if(xx%4==0)return lin+xx/2;else return 199999999;
}else
{int o=xx-yy;lin+=o;//走到相同 yy-=o;xx-=2*o;//一起走 if(xx%3==0)return xx/3*2+lin;else return 199999999;
}
}
int main()
{scanf("%d%d%d%d",&xx,&yy,&xxxx,&yyyy);qxx.push(0);qyy.push(0);ff.push(0);while(!ff.empty())
{lxx=qxx.front();lyy=qyy.front();lff=ff.front();qxx.pop(),qyy.pop(),ff.pop();if(lxx<-100||lxx>100||lyy<-100||lyy>100)continue;ans=min(lff+check(abs(lxx+xx-xxxx),abs(lyy+yy-yyyy)),ans);if(!b[lxx+2+120][lyy+1+120]){b[lxx+2+120][lyy+1+120]=1;ff.push(lff+1);qxx.push(lxx+2);qyy.push(lyy+1);}if(!b[lxx+2+120][lyy-1+120]){b[lxx+2+120][lyy-1+120]=1;ff.push(lff+1);qxx.push(lxx+2);qyy.push(lyy-1);}if(!b[lxx-2+120][lyy+1+120]){b[lxx-2+120][lyy+1+120]=1;ff.push(lff+1);qxx.push(lxx-2);qyy.push(lyy+1);}if(!b[lxx-2+120][lyy-1+120]){b[lxx-2+120][lyy-1+120]=1;ff.push(lff+1);qxx.push(lxx-2);qyy.push(lyy-1);}if(!b[lxx+1+120][lyy+2+120]){b[lxx+1+120][lyy+2+120]=1;ff.push(lff+1);qxx.push(lxx+1);qyy.push(lyy+2);}if(!b[lxx+1+120][lyy-2+120]){b[lxx+1+120][lyy-2+120]=1;ff.push(lff+1);qxx.push(lxx+1);qyy.push(lyy-2);}if(!b[lxx-1+120][lyy+2+120]){b[lxx-1+120][lyy+2+120]=1;ff.push(lff+1);qxx.push(lxx-1);qyy.push(lyy+2);}if(!b[lxx-1+120][lyy-2+120]){b[lxx-1+120][lyy-2+120]=1;ff.push(lff+1);qxx.push(lxx-1);qyy.push(lyy-2);}
}
printf("%d",ans);
}

bzoj1193 [HNOI2006]马步距离 构造+枚举相关推荐

  1. BZOJ1193: [HNOI2006]马步距离

    易水人去,明月如霜. Description 在国际象棋和中国象棋中,马的移动规则相同,都是走"日"字,我们将这种移动方式称为马步移动.如图所示, 从标号为 0 的点出发,可以经过 ...

  2. [Hnoi2006]马步距离

    1285: [Hnoi2006]马步距离 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 36  Solved: 16 [Submit][Status] ...

  3. BZOJ 1193: [HNOI2006]马步距离【贪心+搜索】

    1193: [HNOI2006]马步距离 [题目描述] 传送门 [题解] 大范围贪心,然后小范围BFS,为了答案准确,尽量使这个小范围大,这题100就可以了. 代码如下 #include<que ...

  4. bzoj 1193: [HNOI2006]马步距离(贪心+BFS)

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2117  Solved: 953 [Submit][Sta ...

  5. P2060 [HNOI2006]马步距离

    P2060 [HNOI2006]马步距离 数据到百万级别,明显爆搜不行,剪枝也没法剪.先打表.发现小数据内步数比较受位置关系影响,但数据一大就不影响了.大概搜了一个20*20的表把赋值语句打出来.判断 ...

  6. 【BZOJ 1193】 [HNOI2006]马步距离

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 919   Solved: 419 [ Submit][ ...

  7. bzoj1193:马步距离

    题目描述 在国际象棋和中国象棋中,马的移动规则相同,都是走"日"字,我们将这种移动方式称为马步移动.如图所示, 从标号为 0 的点出发,可以经过一步马步移动达到标号为 1 的点,经 ...

  8. 1193: [HNOI2006]马步距离

    题目链接 题目大意:求出从点 p 到点 s 至少需要经过多少次马步移动 题解:直接搜会T,贪心会WA--正解是大范围贪心,小范围暴力--有种取长补短的感觉--Orz 我的收获:乱搞出奇迹-- #inc ...

  9. BZOJ 1193 HNOI2006 马步距离

    看了题解的... 因为只想了BFS的思路,但是x,y的范围太大了. BFS一定会爆空间的. 喵了看了看题解,发现还是我too young too simple~ 不水了,总结题目思路: 首先题目x,y ...

最新文章

  1. 简单的特征值梯度剪枝,CPU和ARM上带来4-5倍的训练加速 | ECCV 2020
  2. wxml 点击图片下载_云存储之上传图片和展示图片(小程序云开发)
  3. 汇编语言--jcxz指令
  4. LOJ P1155 双栈排序 二分图染色 图论
  5. java azure blob 查询_快速入门:适用于 Java 的 Azure Blob 存储客户端库 v8 | Microsoft Docs...
  6. 自然语言处理顶会 ACL 2018 参会见闻
  7. QQ,MSN,SKYPE等在线状态代码
  8. php gd support not found.,安装php71w-gd并获取错误GD库扩展不适用于此PHP安装
  9. python数据存储系列教程——xls文件的读写、追加(xlwt、xlwt、xlutils)
  10. clickhouse条件函数
  11. K-Means优缺点
  12. CV+Deep Learning——网络架构Pytorch复现系列——classification(一:LeNet5,VGG,AlexNet,ResNet)
  13. java分享微博_Connect/sharing - 微博API
  14. 飘云阁(PYG)番茄插件流氓弹窗清除方法
  15. ArcGIS分享: 地图分幅及编号
  16. ibm 的java实现_IBM Java Toolbox for 实现IBM i 消息通信
  17. 数据库number 对应java_数据库中的number型表示什么
  18. 360插件化踩坑记录(二),RePlugin安装、启动插件无反应
  19. springboot Filed to bind properties under
  20. rust新版组队指令_腐蚀rust新版服务器指令大全 腐蚀指令一览

热门文章

  1. 华为鸿蒙怎么体验,华为鸿蒙 HarmonyOS 2.0 发布,教你如何升级体验
  2. java 新特性之 stream 流
  3. Android笔记 解析xml文件demo
  4. 2021-10-11关于Ubuntu安装搜狗输入法
  5. 记录一次conda环境报错的解决ImportError:: Library not loaded: @rpath/libffi.7.dylib
  6. Ubuntu18.04下安装OpenCV依赖包出现ibjasper-dev无法安装的问题
  7. Octave教程(一)
  8. chrome鼠标手势_Chrome插件推荐——第一弹
  9. android 6.0 点亮屏幕,android6.0 otg连接设备 点亮屏幕(案例)
  10. rnn神经网络模型_ICLR 2019 | 与胶囊网络异曲同工:Bengio等提出四元数循环神经网络...