【BZOJ 1193】 [HNOI2006]马步距离
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
原问题可以等价为两个点。
然后其中一个点要移动到另外一个点。
那么我们可以把左下角那个点(对称总是可以得到一个点在左下角)放在原点的位置。
然后通过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]马步距离的更多相关文章
- BZOJ 1193 [HNOI2006]马步距离:大范围贪心 小范围暴搜
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1193 题意: 给定起点(px,py).终点(sx,sy).(x,y < 100000 ...
- 1193: [HNOI2006]马步距离
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 915[Submit][Statu ...
- 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]马步距离(贪心+bfs)
1193: [HNOI2006]马步距离 题目:传送门 题解: 毒瘤题... 模拟赛时的一道题,刚开始以为是一道大难题...一直在拼命找规律 结果.... 还是说正解吧: 暴力的解法肯定是直接bfs, ...
- P2060 [HNOI2006]马步距离
P2060 [HNOI2006]马步距离 数据到百万级别,明显爆搜不行,剪枝也没法剪.先打表.发现小数据内步数比较受位置关系影响,但数据一大就不影响了.大概搜了一个20*20的表把赋值语句打出来.判断 ...
- 【bzoj1193】[HNOI2006]马步距离
[HNOI2006]马步距离 Description Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Output 含一个整数,表示从 ...
- [BZOJ1193][HNOI2006]马步距离(贪心+dfs)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1193 分析: 首先小范围可以直接暴力.(其实只要用上题目中的表就行了) 如果范围比较大 ...
- [HNOI2006]马步距离
嘟嘟嘟 这题首先直接bfs可定过不了,因此可以先贪心缩小两个点的距离,直到达到某一个较小的范围(我用的是30),再bfs暴力求解. 首先我们求出这两个点的相对距离x, y,这样就相当于从(x, y) ...
随机推荐
- CF1042F Leaf Sets (贪心+树上构造)
题目大意:给你一棵树,让你对叶节点分组,保证每组中,任意两个叶节点之间的距离不大于K,求最小的组数 手动yy的贪心竟然对的 对于每个节点,维护一个$ma[i]$,表示在$i$节点的子树内 未被分组的叶 ...
- C# 发布APP修改APP图标以及名称
很多时候,我们用C#编程后,都要对我们的上位机生成的图标跟名字进行修改,下面我就 VS2015 怎么修改做个说明. 1.打开项目属性 2.打开应用程序的属性界面,对相应的地方进行修改就可以了 3.修改 ...
- 2015 Multi-University Training Contest 7 hdu 5375 Gray code
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- UVALive 5412 Street Directions
Street Directions Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. ...
- Spring 7大功能模块的作用
1. Spring 7大功能模块的作用 1) 核心容器(Spring core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系 ...
- 今天开始看看brpc-baidurpc
链接如下: Link 大概看了一下.没有很明显的感觉.还是喜欢机器学习相关的内容.
- apache rewrite 正則表達式基础
用了好几次rewrite,用的次数不是非常多,每次都忘,都得又一次上网上找一堆现看,总结一下,以免以后忘了 =====================分隔符===================== ...
- html屏蔽鼠标右键
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nyoj--914--Yougth的最大化(二分查找)
Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最 ...
- Scala语言
一.Scala概述 Scala简介 Scala是一种针对JVM将函数和面向对象技术组合在一起的编程语言.所以Scala必须要有JVM才能运行,和Python一样,Scala也是可以面向对象和面向函数的 ...