【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

原问题可以等价为两个点。
然后其中一个点要移动到另外一个点。
那么我们可以把左下角那个点(对称总是可以得到一个点在左下角)放在原点的位置。
然后通过x坐标差和y坐标差。
获取出来,另外一个点的相对位置。
然后问题就转化成
从原点(0,0)出发,到达点(|xp-xs|,|yp-ys|)的问题了
设那个点为(x,y)

这个问题在大范围内。

即当x>10或者y>10的时候。可以谈心地解。

即直接让他往(0,0)的方向贪心跳

直到x<10且y<10就好

(每次跳的时候,如果x>y那么x-=2,y-=1,如果x<=y那么y-=2,x-=1

(如果x或者y变成负数了,那么直接取绝对值就好。因为下一步总是能跳回来的

(变成负数,肯定是0->-1了,那么我们就把它改成往里面跳就好了,那么就是变成1了而不是-1,所以直接取绝对值是没问题的。

【代码】

#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std; const double pi = acos(-1);
const int dx[8] = {-1,-2,-2,-1,1,2,2,1};
const int dy[8] = {-2,-1,1,2,2,1,-1,-2};
const int N = 20;
const int INF = 0x3f3f3f3f; int xp,yp,xs,ys,ans;
int dis[N+10][N+10];
queue<pair<int,int> > dl; int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
scanf("%d%d%d%d",&xp,&yp,&xs,&ys);
xp = abs(xp-xs);
yp = abs(yp-ys); while (xp > 10 || yp>10){
if (xp>yp){
xp-=2;
yp-=1;
}else {
yp-=2;
xp-=1;
}
xp = abs(xp);yp = abs(yp);
ans++;
} dl.push(make_pair(0,0));
memset(dis,INF,sizeof dis); dis[0][0] = 0;
while (!dl.empty()){
int x = dl.front().first,y = dl.front().second;
dl.pop();
for (int i = 0;i < 8;i++){
int tx = x+dx[i],ty = y + dy[i];
if (tx<-1 || ty<-1 || tx>11 || ty>11) continue;
if (dis[tx][ty]>dis[x][y]+1){
dis[tx][ty] = dis[x][y] + 1;
dl.push(make_pair(tx,ty));
}
}
}
printf("%d\n",ans+dis[xp][yp]);
return 0;
}

【BZOJ 1193】 [HNOI2006]马步距离的更多相关文章

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

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

  2. 1193: [HNOI2006]马步距离

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

  3. bzoj1193: [HNOI2006]马步距离

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

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

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

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

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

  6. P2060 [HNOI2006]马步距离

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

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

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

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

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

  9. [HNOI2006]马步距离

    嘟嘟嘟 这题首先直接bfs可定过不了,因此可以先贪心缩小两个点的距离,直到达到某一个较小的范围(我用的是30),再bfs暴力求解. 首先我们求出这两个点的相对距离x, y,这样就相当于从(x, y) ...

随机推荐

  1. [Atcoder Code Festival 2017 Qual A Problem D]Four Coloring

    题目大意:给一个\(n\times m\)的棋盘染四种颜色,要求曼哈顿距离为\\(d\\)的两个点颜色不同.解题思路:把棋盘旋转45°,则\((x,y)<-(x+y,x-y)\).这样就变成了以 ...

  2. [读书笔记] Python 数据分析 (十一)经济和金融数据应用

    resample: 重采样函数,可以按照时间来提高或者降低采样频率,fill_method可以使用不同的填充方式. pandas.data_range 的freq参数枚举: Alias Descrip ...

  3. 【Latex常见问题总结】

    1. 非数学符号如max/min将下标放到正下方,这个问题折腾了很久, 下标不在正下方会带俩两个问题,一是有时候不够美观,二是会使得数学公式过长越界,需要换行. 解决方案:将符号转换为数学符号, \m ...

  4. 关于libnmap 的一些应用

    随笔描述 nmap 可以进行端口的扫描,在安全或运维中可以说是一款不错的神奇吧,在大部分LINUX 里面都自带了nmap 这款工具,他不仅仅是端口扫描,自身还提供许多插件可以使用. 官方文档 nmap ...

  5. code-reading-notes--xml 解析

  6. STM32 Cubemx 配置定时器定时1mS

    最近才发现原来我把定时器里的配置参数代表的意义给搞混了,这里记录一下,防止以后自己忘记. 以建立一个定时1mS定时器为例: 1.先打开定时器 2.配置好时钟 3.配置定时器设置 重点来了,以前在这里我 ...

  7. class的基本操作方法

    JavaScript语言中,生成实例对象的传统方法是通过构造函数 function Point(x,y){ this.x = x; this.y = y; } Point.prototype.toSt ...

  8. Java基础学习总结(56)——学java必知十大学习目标

    诞生至今已有20年的Java,现在依然有很多人使用.回顾过去十五年的成果,Java一直是数一数二的.Java已经成为世界范围内应用最为广泛的编程语言之一.那么在学java的时候你知道到底要学什么吗?一 ...

  9. angular-模块Module

    模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. <div ng-app="myApp" runoob-dire ...

  10. 微信企业号开发:微信用户信息和web网页的session的关系

         微信企业号的用户是须要验证的,因此能关注企业号的用户事实上就是已经通过验证的用户.但企业应用中打开一个网页,在这个网页中怎样依据微信用户的信息创建web应用中最长使用的session呢?微信 ...