1 条题解

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

    📝 题目大意

    给定两个 N×NN \times N 的字符矩阵 AABB(均为小写字母),保证恰好只有一个位置 (i,j)(i, j) 上的字符不同,找出该位置并输出其行号和列号。

    💡 解题思路

    1. 题目分析N100N \leq 100,数据范围很小,且题目保证恰好存在一个不同位置,无需考虑找不到或存在多个的情况。
    2. 算法推导
      • 读入 NN,然后分别读入矩阵 AABB 的每一行(用 vector<string> 存储)。
      • 双重循环遍历所有 (i,j)(i, j)0i,j<N0 \le i, j < N),比较 A[i][j]A[i][j]B[i][j]B[i][j]
      • 一旦发现不同,立即输出 i+1i+1j+1j+1(题目下标从 11 开始),然后 return 0 退出即可。
    3. 边界与细节
      • 唯一可能踩坑的是下标:代码中循环从 00 开始,输出时需 +1+1
      • 由于题目保证恰好有一个不同位置,找到后直接输出并退出即可,无需继续遍历。

    ⏱️ 复杂度分析

    • 时间复杂度O(N2)O(N^2),最坏情况下需要遍历整个矩阵。
    • 空间复杂度O(N2)O(N^2),存储两个 N×NN \times N 的字符串矩阵。

    💻 标准代码 (C++)

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    int main() {
        int N;
        cin >> N;
        vector<string> A(N), B(N);          // 存储两个 N×N 矩阵
        // 读入矩阵 A
        for (int i = 0; i < N; i++) {
            cin >> A[i];
        }
        // 读入矩阵 B
        for (int i = 0; i < N; i++) {
            cin >> B[i];
        }
        // 逐格比较,找到第一个不同位置
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (A[i][j] != B[i][j]) {
                    // 题目下标从 1 开始,所以 +1 输出
                    cout << i + 1 << " " << j + 1 << endl;
                    return 0;               // 找到后直接退出
                }
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    791
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者