bzoj1193 马步距离
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 马步距离的更多相关文章
- BZOJ1193 马步距离 (贪心)
恶心的题目= = #include <cstdio> #include <cmath> #include <algorithm> ][]={{,,,,},{,,,, ...
- bzoj1193: [HNOI2006]马步距离
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MB Description 在国际象棋和中国象棋中,马的移动规则相同,都是走&q ...
- [BZOJ1193][HNOI2006]马步距离 大范围贪心小范围爆搜
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1988 Solved: 905[Submit][Statu ...
- 【bzoj1193】[HNOI2006]马步距离
[HNOI2006]马步距离 Description Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Output 含一个整数,表示从 ...
- bzoj1193: [HNOI2006]马步距离(贪心+bfs)
1193: [HNOI2006]马步距离 题目:传送门 题解: 毒瘤题... 模拟赛时的一道题,刚开始以为是一道大难题...一直在拼命找规律 结果.... 还是说正解吧: 暴力的解法肯定是直接bfs, ...
- 1193: [HNOI2006]马步距离
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 915[Submit][Statu ...
- P2060 [HNOI2006]马步距离
P2060 [HNOI2006]马步距离 数据到百万级别,明显爆搜不行,剪枝也没法剪.先打表.发现小数据内步数比较受位置关系影响,但数据一大就不影响了.大概搜了一个20*20的表把赋值语句打出来.判断 ...
- [BZOJ1193][HNOI2006]马步距离(贪心+dfs)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1193 分析: 首先小范围可以直接暴力.(其实只要用上题目中的表就行了) 如果范围比较大 ...
- BZOJ 1193 [HNOI2006]马步距离:大范围贪心 小范围暴搜
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1193 题意: 给定起点(px,py).终点(sx,sy).(x,y < 100000 ...
随机推荐
- U盘安装Ubuntu三步走
需要工具: U盘.Ubuntu的ISO镜像.universal usb installer 1.下载Ubuntu (1) (2)我这里下载14.04版本 (3)我这里下载64位系统 下载后得到的是个t ...
- ORA-01034:Oracle not available
ORA-01034:Oracle not available 问题描述:ora-01034常与ora-27101同时出现,都是在登录数据库的时候报该错误 错误原因:出现ORA-01034和ORA-27 ...
- L1-041 寻找250
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字. 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”. ...
- 了解SAGA
萨迦(尤指古代挪威或冰岛讲述冒险经历和英雄业绩的长篇故事)
- Python 文件修改
# 需求: 把好人换成sb # 必须: # 1. 先从文件中读取内容 # 2. 把要修改的内容进行修改 # 3. 把修改好的内容写人一个新文件 # 4. 删除掉原来的文件 # 5. 把新文件重命名成原 ...
- Python 之 numpy 和 tensorflow 中的各种乘法(点乘和矩阵乘)
点乘和矩阵乘的区别: 1)点乘(即“ * ”) ---- 各个矩阵对应元素做乘法 若 w 为 m* 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵. 若 w 为 m*n ...
- Executor 框架
Java的线程既是工作单元,也是执行机制.从JDK5开始,把工作单元与执行机制分离开来.工作单元包括Runnable和Callable,而执行机制由Executor框架提供. Executor 框架简 ...
- zzuli2228: 神奇的排名
题目描述 小明最近沉迷上了打codeforces的比赛,和acm不同的是,这种比赛是积分制的,按照做题用时,错误次数以及hack来计分的.在某一场比赛,共有n个人参加比赛,现在给出你所有人的分数,小明 ...
- hdu2068 RPG的错排 组合数/递推
#include<stdio.h> ]; long long c(int a,int b) { ,j; ;i>=a-b+,j<=b;i--,j++) sum=sum*i/j; ...
- freemarker在js中的应用
<script type="text/javascript"> //freemarker在js中的应用: var newOrganizations = []; < ...