蓝桥杯2015初赛 - 移动距离 - 找规律
题目链接
http://oj.ecustacm.cn/problem.php?id=1261
思路
我本来是想用Dijkstra写的,发现建图的时候没有办法建出来。
看了题解勉强懂了。
-
首先判断给出的两个数所在行列(也就是其坐标);
-
之后再判断他们的奇偶性。如果是奇数说明那一列的数据是倒序(倒着)输入的,翻转一下就行;
-
需要注意的是,以下代码是建立建图下标从0开始的,而不是1。
AC代码
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<vector>
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
int w, w1, w2;
while (cin >> w >> w1 >> w2)
{
//cout << (3 & 1) << endl; // 奇数1
//cout << (2 & 1) << endl; // 偶数0
int x1 = (w1 - 1) / w, x2 = (w2 - 1) / w; // 计算w1和w2所在的行
// -1 是因为下标都从0开始
int y1 = (w1 - 1) % w, y2 = (w2 - 1) % w; // 计算w1和w2所在的列
if (x1 & 1) y1 = w - 1 - y1; // 判断是否是奇数
if (x2 & 1) y2 = w - 1 - y2; // 判断是否是奇数
//w-1是因为下标从0开始,判断是奇数的话说明那一列的数是倒序,需要反转
int ans = abs(x1 - x2) + abs(y1 - y2); // 输出曼哈顿距离
printf("%d\n", ans);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」