P2060 马步距离(洛谷)
我们无论遇到什么困难,都不要拖,微笑着面对他,战胜拖延的最好方法就是面对拖延。
今天又拖延了……
早晨听完老师讲课,本想做一道题练练手的,结果因为懒,瘫了一上午。最后在固定的刷题时间去面对了这道题,然后就A了
额,这个题的思路是很好想的,虽然数据大了这么亿点点,但不难看出是个广搜吧(根本不是)。
广搜根本不可能啊,数据太大了。但是我们可以发现什么东西,这个棋盘上没有障碍!
谁不知道平时广搜是因为不知道往哪里走才都试一遍的。但这个知道往哪走啊!
都知道怎么走了还广搜个毛线,冲过去就好了,但在最后几步,还是要绕一下的,因为范围实在太小,直接打表不香吗……
所以这个题的标准(简单快捷)的解法就是:贪心+打表。(话说这个题为什么标签有搜索……,可能就是为了骗人。也可能真的有大佬能做出来,但我不会)
总之这个题是真的不错,我觉得可以锻炼我们的思维(因为我懒所以写的更短了)
上代码吧:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long cjx,cjy,shu;
long long sz[6][6]=
{
{0,3,2,3,2},
{3,2,1,2,3},
{2,1,4,3,2},
{3,2,3,2,3},
{2,3,2,3,4},
};//这样看着顺眼。也有利于后期查错。而且4个方向的数都一样,就是把坐标翻转一下的事。
long long px,py,sx,sy;//4个变量,多个xy我就会乱起名,还是用题目名称靠谱一些。
int main()
{
cin>>px>>py>>sx>>sy;
cjx=abs(sx-px);//算他们之间的距离。
cjy=abs(sy-py);
while(true)
{
if(cjx<=4&&cjy<=4)//可以打表了。
{
cout<<shu+sz[cjx][cjy]<<endl;//中间可能把x和y交换了,但这一点关系都没有,仔细想想就知道了(如果把走过来的路程中所有走法全部反转,x和y就会交换,但移动次数不变)
return 0;
}
if(cjx<cjy)//马那个奇怪的走法,一边走2格一边走1格,向哪边走2格呢?当然是距离目标地点远的那一边。
{
swap(cjx,cjy);
}
cjx-=2;
cjy-=1;
if(cjx<0)//都说了,反转一下的事,再判断在哪个方向多麻烦。
{
cjx=0-cjx;
}else if(cjy<0)
{
cjy=0-cjy;
}
shu++;
}
return 0;
}
这个代码真的短,道理也很简单,我觉得最难的地方就是看见题目能放弃广搜(看看数据就放弃了),去往这个方面想。只要知道思路,写代码还是很简单的。
P2060 马步距离(洛谷)的更多相关文章
- P2060 [HNOI2006]马步距离
P2060 [HNOI2006]马步距离 数据到百万级别,明显爆搜不行,剪枝也没法剪.先打表.发现小数据内步数比较受位置关系影响,但数据一大就不影响了.大概搜了一个20*20的表把赋值语句打出来.判断 ...
- bzoj1193: [HNOI2006]马步距离
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MB Description 在国际象棋和中国象棋中,马的移动规则相同,都是走&q ...
- 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 MBSubmit: 1988 Solved: 905[Submit][Statu ...
- 【bzoj1193】[HNOI2006]马步距离
[HNOI2006]马步距离 Description Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Output 含一个整数,表示从 ...
- bzoj1193: [HNOI2006]马步距离(贪心+bfs)
1193: [HNOI2006]马步距离 题目:传送门 题解: 毒瘤题... 模拟赛时的一道题,刚开始以为是一道大难题...一直在拼命找规律 结果.... 还是说正解吧: 暴力的解法肯定是直接bfs, ...
- bzoj1193 马步距离
Description 求点(xs,ys)走马步到(xp,yp)的最小步数 Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Out ...
- 「Luogu P2060 [HNOI2006]马步距离」
一道神奇的BFS 前置芝士 BFS(DFS):这次真的不是我懒,我也不知道DFS怎么写. STL中的set或者map. 具体做法 数据范围非常大,直接BFS肯定是一片黑色(指TLE,MLE),直接贪心 ...
- BZOJ 1193 [HNOI2006]马步距离:大范围贪心 小范围暴搜
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1193 题意: 给定起点(px,py).终点(sx,sy).(x,y < 100000 ...
随机推荐
- cb38a_c++_STL_算法_transform
cb38a_c++_STL_算法_transformtransform()算法有两种形式:transform(b1,e1,b2,op);//b1(源区间)的数据通过op函数处理,存放在b2(目标区间) ...
- cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发
/*cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发队列(只能两端数据)与堆栈(只能一端操作数据)都没有迭代器.,队列:FIFO先进先出自适应容器(容器适配器)栈适配器ST ...
- RabbitMQ巩固学习一
说起RabbitMQ大家第一时间应该想到的就是异步队列,关于异步队列的话题简直太多了,各位同学在园子里一搜便知.我第一次听异步队列这个名词感觉非常高大上
- OS_页面置换算法:C++实现
一.实验目的: 通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种页面置换算法的基本思想和实现过程,并比较它们的效率. 二.实验内容: 本实 ...
- Unable to resolve dependency for ':app@debug/compileClasspath': Could not find any version that matc
错误展示: 错误提示: Unable to resolve dependency for ':app@debug/compileClasspath': Could not find any versi ...
- gatewayworker 安装 pcntl 扩展
安装其它扩展也是如此. 第一步,查看php版本: /phpstudy/server/php/bin/php -v 第二步,下载扩展文件: http://php.net/releases/ 这里面寻找 ...
- Volatile关键字的解读
原子性 定义: 在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行. Java内存模型只保证了基本读取和赋值是原子性操作,如果要实现更大范围 ...
- 《The Google File System》论文研读
GFS 论文总结 说明:本文为论文 <The Google File System> 的个人总结,难免有理解不到位之处,欢迎交流与指正 . 论文地址:GFS Paper 阅读此论文的过程中 ...
- 并发工具CyclicBarrier源码分析及应用
本文首发于微信公众号[猿灯塔],转载引用请说明出处 今天呢!灯塔君跟大家讲: 并发工具CyclicBarrier源码分析及应用 一.CyclicBarrier简介 1.简介 CyclicBarri ...
- css中input与button在一行高度不一致的解决方法
在写html表单的时候,发现了一个问题:input和button设置了一样的宽高,但是显示高度确不一致,先看代码: <style> input,button{ width:100px; h ...