1 条题解

  • 0
    @ 2026-6-19 10:30:34

    📝 题目大意

    直线上依次排列着 7 个点 A~G,给出相邻点之间的距离。给定两个不同的大写字母 p 和 q,求它们之间的直线距离。

    💡 解题思路

    1. 题目分析:数据范围极小(只有 7 个点),且点之间的相邻距离是固定的。本质上是求一维数轴上两点间距离。
    2. 算法推导
      • 将点 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> 存储每个点对应的坐标,读取两个字符后直接查表求差。
    3. 边界与细节:题目保证 p ≠ q,无需处理相同字符的情况。输入的两个字母顺序可能任意(如 G B),用 abs 取绝对值可统一处理。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),只有常数次查表和一次减法。
    • 空间复杂度O(1)O(1),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
    上传者