bzoj1193:马步距离

题目描述

在国际象棋和中国象棋中,马的移动规则相同,都是走“日”字,我们将这种移动方式称为马步移动。如图所示,

从标号为 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 }
时间: 2024-08-11 01:21:43

bzoj1193:马步距离的相关文章

BZOJ1193 马步距离 (贪心)

恶心的题目= = 1 #include <cstdio> 2 #include <cmath> 3 #include <algorithm> 4 int f[5][5]={{0,3,2,3,2},{3,2,1,2,3},{2,1,4,3,2},{3,2,3,2,3},{2,3,2,3,4}}; 5 int main() 6 { 7 int a,b,c,d,x,y,ans=0; 8 scanf("%d%d%d%d",&a,&b,&

[BZOJ1193][HNOI2006]马步距离 大范围贪心小范围爆搜

1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1988  Solved: 905[Submit][Status][Discuss] Description 在国际象棋和中国象棋中,马的移动规则相同,都是走"日"字,我们将这种移动方式称为马步移动.如图所示, 从标号为 0 的点出发,可以经过一步马步移动达到标号为 1 的点,经过两步马步移动达到标号为 2 的点.任给 平面上的两点 p 和 s ,它

【BZOJ 1193】 [HNOI2006]马步距离

1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 919  Solved: 419 [Submit][Status] Description Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Output 含一个整数,表示从点p到点s至少需要经过的马步移动次数. Sample Input 1 2 7 9 Sample Output 5 贪心+暴

bzoj1193 [HNOI2006]马步距离

Description 在国际象棋和中国象棋中,马的移动规则相同,都是走“日”字,我们将这种移动方式称为马步移动.如图所示,从标号为 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)

[BZOJ1193][HNOI2006]马步距离(贪心+dfs)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1193 分析: 首先小范围可以直接暴力.(其实只要用上题目中的表就行了) 如果范围比较大的话就贪心着向目标点移动 如何贪心呢? 我们按照当前点与目标点的横坐标差和纵坐标差跳.哪个差大就跳-2,另一个就跳-1.如果相等,那么无所谓,因为会发现小范围的表格会有对称性.

马步资料整理

原文http://blog.sina.com.cn/s/blog_7dae071b0101eop6.html 目录 简介 内在的精神 马步桩的修炼 马步健身术 步骤 效果 注意事项 马步冲拳 一,马步蹲法: 二,冲拳: 献礼珍品<马步歌诀>: 1.歌诀 2.释义1) 3.释义2) 4.站桩扎马常见误区 5.关于站桩 桩功解密: 马步站桩指要 大道至简,武学求真录----------谈筋骨功夫 少林四平马步 四平式马步桩功姿势 简介 马步是练习武术最基本的桩步,因此有"入门先站三年桩&

各种距离 欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准欧氏距离、马氏距离、余弦距离、汉明距离、杰拉德距离、相关距离、信息熵

1. 欧氏距离(Euclidean Distance) 欧氏距离是最容易直观理解的距离度量方法,我们小学.初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离. 二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离: 三维空间点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离(两个n维向量): Matlab计算欧氏距离: Matlab计算距离使用pdist函数.若X是一个m×n的矩阵,

基于欧氏距离和马氏距离的异常点检测—matlab实现

前几天接的一个小项目,基于欧氏距离和马氏距离的异常点检测,已经交接完毕,现在把代码公开. 基于欧式距离的: load data1.txt %导入数据,行为样本,列为特征 X=data1; %赋值给X u=mean(X); %求均值 [m,n]=size(X); for i=1:m dist(i)=sqrt(sum(X(i,:)-u).^2); end [a,b]=sort(dist);%对欧氏距离进行排序 T=ceil(m*0.02)%设置阀值 Threshold=a(m-T);%定为阀值 le

马氏距离(Mahalanobis distance)

马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离.它是一种有效的计算两个未知样本集的相似度的方法.与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度. 对于一个均值为,协方差矩阵为Σ的多变量矢量,其马氏距离为 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的