Description

求点(xs,ys)走马步到(xp,yp)的最小步数

 

Input

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

Output

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

设起点与终点的坐标差为(x,y)

则问题转化为求向量方程a*(1,2)+b*(2,1)+c*(1,-2)+d*(2,-1)==(x,y)的解满足a,b,c,d为整数且绝对值之和最小。

由对称性可令0≤y≤x

使a*(1,2)+b*(2,1)接近(x,y)并求c,d

使b*(2,1)+d*(2,-1)接近(x,y)并求a,c

枚举即可

#include<cstdio>
inline void mins(int&a,int b){if(a>b)a=b;}
inline void abss(int&a){if(a<)a=-a;}
inline int abs(int a){return a>?a:-a;}
int main(){
int x,y,x2,y2,as,bs,cs,ds,ans=0x7fffffff;
scanf("%d%d%d%d",&x,&y,&x2,&y2);
x-=x2;y-=y2;
abss(x);abss(y);
if(x<y){int c=x;x=y;y=c;}
int as0=(y*-x)/,bs0=(x*-y)/;
for(as=as0-;as<=as0+;as++)
for(bs=bs0-;bs<=bs0+;bs++){
int v1=x-as-bs*,v2=*as+bs-y;
int v3=(v1+v2)/;
cs=v2-v3;ds=v1-v3;
if(as+*bs+cs+*ds==x&&*as+bs-*cs-ds==y)mins(ans,abs(as)+abs(bs)+abs(cs)+abs(ds));
}
bs0=(x+y*)/;
int ds0=(x-y*)/;
for(bs=bs0-;bs<=bs0+;bs++)
for(ds=ds0-;ds<=ds0+;ds++){
int v1=x-bs*-ds*,v2=(y-bs+ds)/;
as=(v1+v2)/;cs=(v1-v2)/;
if(as+*bs+cs+*ds==x&&*as+bs-*cs-ds==y)mins(ans,abs(as)+abs(bs)+abs(cs)+abs(ds));
}
printf("%d",ans);
return ;
}

bzoj1193 马步距离的更多相关文章

  1. BZOJ1193 马步距离 (贪心)

    恶心的题目= = #include <cstdio> #include <cmath> #include <algorithm> ][]={{,,,,},{,,,, ...

  2. bzoj1193: [HNOI2006]马步距离

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MB Description 在国际象棋和中国象棋中,马的移动规则相同,都是走&q ...

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

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1988  Solved: 905[Submit][Statu ...

  4. 【bzoj1193】[HNOI2006]马步距离

    [HNOI2006]马步距离 Description Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Output 含一个整数,表示从 ...

  5. bzoj1193: [HNOI2006]马步距离(贪心+bfs)

    1193: [HNOI2006]马步距离 题目:传送门 题解: 毒瘤题... 模拟赛时的一道题,刚开始以为是一道大难题...一直在拼命找规律 结果.... 还是说正解吧: 暴力的解法肯定是直接bfs, ...

  6. 1193: [HNOI2006]马步距离

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 915[Submit][Statu ...

  7. P2060 [HNOI2006]马步距离

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

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

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1193 分析: 首先小范围可以直接暴力.(其实只要用上题目中的表就行了) 如果范围比较大 ...

  9. BZOJ 1193 [HNOI2006]马步距离:大范围贪心 小范围暴搜

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1193 题意: 给定起点(px,py).终点(sx,sy).(x,y < 100000 ...

随机推荐

  1. docker小demo

    http://www.blogjava.net/yongboy/archive/2013/12/12/407498.html

  2. The "Double-Checked Locking is Broken" Declaration

    双重检查锁定在延迟初始化的单例模式中见得比较多(单例模式实现方式很多,这里为说明双重检查锁定问题,只选取这一种方式),先来看一个版本: public class Singleton { private ...

  3. OPENVZ低版本centos6.5安装BBR加速手记

    玩 VPS,开机第一件事就是安装 BBR,至于效果怎么样还真不好说,依据不同的线路质量而定,但有总比没有好. 因为这次用的是 openvz 平台,所以找了一个网上的 ovz 专用的 BBR 一键安装代 ...

  4. 基于GUI的简单聊天室01

    运用了Socket编程,gui,流的读入和写出,线程控制等 思路: 1.首先是在客户端中先建立好聊天的GUI 2.建立服务器端,设置好端口号(用SocketServer),其中需要两个boolean变 ...

  5. 背景 半透明问题 rgba + filter

    <html style=" background: violet;"><head><meta charset="utf-8"> ...

  6. array_merge、array_merge_recursive

    原文:http://www.111cn.net/phper/php/61889.htm    我在php学习在使用到最多的数据合并方法就是array_merge.array_merge_recursi ...

  7. Android 源码阅读之SMS,MMS

    主界面: com.android.mms.ui.ConversationList.java  [extends ListActivity] 点击新建信息:onListItemClick -〉 posi ...

  8. [编程题] N阶楼梯上楼问题

    import sys for line in sys.stdin: N=int(line.split()[0]) d1=1 d2=2 if(N==1): print 1 continue elif(N ...

  9. 多名历年高考状元最终选择做中国顶尖黑客 - imsoft.cnblogs

    原标题:揭秘中国顶尖黑客:二分之一是历年高考[微博]状元 “二分之一是各地的历年高考状元,二分之一是数学专业,二分之一来自微软.” Keen这样的团队是坚决与黑产划清界限的,这也是圈内的“道德洁癖”, ...

  10. PR使用技巧

    1.要经常使用快捷键,这样能进步效率. 常用的快捷键是:+(放大),-(缩小),v(移动),c(切刀),x(变速),L(快放),ctrl+K(载切),ctrl+M(输出视频),ctrl+alt+M(输 ...