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. python break continue跳过和跳出循环

    break 语句可以跳出 for 和 while 的循环体.continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环.用break continue 写一个乘法表下 ...

  2. 经典T-SQL代码

    1. N到M条记录(要有主索引ID)SelectTop M-N *From [Table] Where ID in (SelectTop M ID From [Table]) Orderby ID  ...

  3. 官网下载的spring-framework的一些描述

    刚下载下来是这个文件夹:

  4. 中断一个telnet连接

    假如我要telnet一个端口通不通,测试通过之后后出现黑屏的界面 这时候需要按下ctrl+] 组合键 然后输入 quit 即可退出telnet窗口,可以继续测试下一个端口~

  5. SSRS配置

    1. Reporting Services Configuration Manager-->Execution Account. 2. C:\Program Files\Microsoft SQ ...

  6. UI基础:UILabel.UIFont 分类: iOS学习-UI 2015-07-01 19:38 107人阅读 评论(0) 收藏

    UILabel:标签 继承自UIView ,在UIView基础上扩充了显示文本的功能.(文本框) UILabel的使用步骤 1.创建控件 UILabel *aLabel=[[UILabel alloc ...

  7. C# 泛型详解---进阶编程(七)

    今天我们来学习在C#的泛型技巧,传统的课本都在讲解什么是泛型,然后列举一大堆代码示例告诉你什么是泛型,今天我们就来聊聊更加本质的东西,我为什么要用泛型?它是来解决什么问题的?底层原理是什么? 简单来说 ...

  8. Linux运维学习笔记-iptables知识总结

  9. magento -- 给Magento提速之缓存上的探索

    依然在为Magento提速做努力,除了自带的缓存和编译,之前的所作的很多努力都是从减少JS,Css,图片等载入时间入手,而对页面载入耗时最早有时也是最大的一部分--获取页面数据没有做太多处理,以gap ...

  10. Ubuntu终端及VI 快捷键

    Ubuntu终端 快捷键 功能 Tab 自动补全 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 Ctrl+k 删除此处至末尾的所有内容 Ctrl+u 删除此处至开始的所有内容 Ct ...