1 条题解
-
0
📝 题目大意
直线上依次排列着 7 个点 A~G,给出相邻点之间的距离。给定两个不同的大写字母 p 和 q,求它们之间的直线距离。
💡 解题思路
- 题目分析:数据范围极小(只有 7 个点),且点之间的相邻距离是固定的。本质上是求一维数轴上两点间距离。
- 算法推导:
- 将点 A 视为数轴原点(坐标 0),根据相邻距离依次累加,计算出每个点的坐标:
- A=0, B=3, C=4, D=8, E=9, F=14, G=23
- 这样两点 p 和 q 之间的距离即为
abs(pos[p] - pos[q]),即前缀和差值取绝对值。 - 使用
map<char, int>存储每个点对应的坐标,读取两个字符后直接查表求差。
- 将点 A 视为数轴原点(坐标 0),根据相邻距离依次累加,计算出每个点的坐标:
- 边界与细节:题目保证 p ≠ q,无需处理相同字符的情况。输入的两个字母顺序可能任意(如
G B),用abs取绝对值可统一处理。
⏱️ 复杂度分析
- 时间复杂度:,只有常数次查表和一次减法。
- 空间复杂度:,map 中仅存储 7 个键值对。
💻 标准代码 (C++)
#include <iostream> #include <map> #include <cmath> using namespace std; int main() { map<char, int> pos; // 以 A 为原点,记录每个点的累计坐标(前缀和) pos['A'] = 0; pos['B'] = 3; pos['C'] = 4; pos['D'] = 8; pos['E'] = 9; pos['F'] = 14; pos['G'] = 23; char p, q; cin >> p >> q; // 两点距离 = 坐标差的绝对值 cout << abs(pos[p] - pos[q]) << endl; return 0; }
- 1
信息
- ID
- 714
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者