题目描述

在国际象棋和中国象棋中,马的移动规则相同,都是走“日”字,我们将这种移动方式称为马步移动。如图所示,
从标号为 0 的点出发,可以经过一步马步移动达到标号为 1 的点,经过两步马步移动达到标号为 2 的点。任给
平面上的两点 p 和 s ,它们的坐标分别为 (xp,yp) 和 (xs,ys) ,其中,xp,yp,xs,ys 均为整数。从 (xp,yp) 
出发经过一步马步移动可以达到 (xp+1,yp+2)、(xp+2,yp+1)、(xp+1,yp-2)、(xp+2,yp-1)、(xp-1,yp+2)、(xp-2,
yp+1)、(xp-1,yp-2)、(xp-2,yp-1)。假设棋盘充分大,并且坐标可以为负数。现在请你求出从点 p 到点 s 至少
需要经过多少次马步移动?

输入

只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys。并且它们的都小于10000000。

输出

含一个整数,表示从点p到点s至少需要经过的马步移动次数。

样例输入

1 2 7 9

样例输出

5
题解
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 int u[10]={1,1,2,2,-1,-1,-2,-2},p[10]={2,-2,1,-1,2,-2,1,-1};
 6 int sx,sy,ex,ey;
 7 int q[10005][3];
 8 int ans,dis[105][105];
 9 bool ok(int x,int y)
10 {
11     if(x<0||y<0||x>100||y>100)return false;
12     return true;
13 }
14 void bfs(int x,int y)
15 {
16     memset(dis,-1,sizeof(dis));
17     int head=0,tail=1;
18     q[0][0]=x;q[0][1]=y;dis[x][y]=0;
19     while(head!=tail)
20     {
21         int xx=q[head][0],yy=q[head++][1];
22         for(int i=0 ; i<8 ; ++i)
23         {
24             int dx=u[i]+xx;
25             int dy=p[i]+yy;
26             if(!ok(dx,dy)||dis[dx][dy]!=-1)continue;
27             dis[dx][dy]=dis[xx][yy]+1;
28             if(dx==50&&dy==50)return ;
29             q[tail][0]=dx;q[tail++][1]=dy;
30         }
31     }
32 }
33 int main()
34 {
35     scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
36     int x=abs(sx-ex),y=abs(sy-ey);
37     while(x+y>=50)
38     {
39         if(x<y)swap(x,y);
40         x-=4;
41         if(x-4<2*y)y-=2;
42         ans+=2;
43     }
44     x+=50;y+=50;
45     bfs(x,y);
46     printf("%d",ans+dis[50][50]);
47     return 0;
48 }

转载于:https://www.cnblogs.com/fujudge/p/7496840.html

bzoj1193:马步距离相关推荐

  1. BZOJ1193 马步距离 (贪心)

    恶心的题目= = 1 #include <cstdio> 2 #include <cmath> 3 #include <algorithm> 4 int f[5][ ...

  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: [HNOI2006]马步距离

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

  8. 【ACWing】2135. 马步距离(配数学证明)

    题目地址: https://www.acwing.com/problem/content/description/2137/ 在国际象棋和中国象棋中,马的移动规则相同,都是走"日" ...

  9. 1193: [HNOI2006]马步距离

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

最新文章

  1. javaweb友好的删除提示语句!
  2. VTK:字形2D用法实战
  3. 注释和简单用户交互程序
  4. 案例:无人船测量点位数据+ArcGIS 10.6软件生成三维水下地形的两种方法
  5. 俄罗斯国家黑客TA505被指攻击金融机构
  6. python 以行为单位进行字符串的切割
  7. javac与java版本不一致
  8. 一个用于分布式DNN训练加速的通用通信调度器
  9. 分享网站变黑白色代码整站灰色插件方法
  10. 【NIPS挑战赛优胜解】用机器学习判断基因变异所属类别
  11. 孕育独角兽独立融资上市,互联网巨头都藏着什么“阳谋“?
  12. JavaScript-switch条件分支语句
  13. IPS,LED,LCD,TFT简介
  14. 【第二十四期】golang 一年经验开发 富途
  15. 老电脑也要玩tensorflow,解决AVX、SEE、SEE2等报错之路
  16. java 使用sourceforge.pinyin4j查询汉字拼音
  17. 目标检测算法综述—— One-Stage方法
  18. 人脸识别摄像头采集数据训练
  19. 数据备份有哪些种类?
  20. pert计算公式期望值_PERT的应用

热门文章

  1. 宠物 java_java宠物练习
  2. Mysql(Innodb)如何避免幻读
  3. 2016年主机游戏大作全方位预测
  4. Java的自学之旅10
  5. IP融合网络引领通信变革
  6. 基于 Springboot 的 Bark 通知辅助处理项目
  7. 聚星完整源码 UI超级好看+对接NG接口+双玩系统
  8. 再一次被入侵之潜伏的挖矿病毒
  9. 徘徊于千八关口未能如愿?黄金是涨是跌?走势分析策略指导
  10. 【YOLOv7_0.1】网络结构与源码解析