链接:httpsacnowcodercomacmcontest62033D来源:牛客网游游有一个2行�n列的矩阵她想知道有多少个2∗22∗2的子矩阵中4个元素恰好有2种不同的元素?请注意由于子矩阵可能过大因此按如下的形式给出:第一行共有�m个连续段连续相同元素则用一些二元组�1�1�2�2����u 1 c 1 u 2 c 2 u m c m 来表示:第一行首先是有�1c 1 个�1
题目要求求解在给定的矩阵中,有多少个2x2的子矩阵中,恰好有两种不同的元素。
首先,我们需要将题目给出的矩阵转化为一个二维矩阵,方便后续操作。假设给定的矩阵的行数为n,列数为m。我们可以用一个二维数组matrix[n][m]来表示矩阵中的元素。
然后,我们可以通过遍历所有的2x2子矩阵,判断其中的4个元素是否有两种不同的元素。具体思路如下:
- 使用两重循环遍历矩阵中的每一个元素,假设当前元素的坐标为(i, j)。
 - 对于每一个元素(matrix[i][j]),我们可以取其右边、下方和右下方的元素作为2x2子矩阵的其他三个元素。
 - 判断这四个元素是否有两种不同的值。如果有两种不同的值,说明这个2x2子矩阵满足题目要求,计数器count加一。
 - 最后输出计数器count的值,即为满足条件的2x2子矩阵的个数。
 
下面是具体的代码实现:
#include <iostream>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m; // 输入矩阵的行数和列数
    int matrix[n][m];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> matrix[i][j]; // 输入矩阵中的元素
        }
    }
    int count = 0; // 计数器,记录满足条件的子矩阵个数
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < m - 1; j++) {
            int val1 = matrix[i][j];
            int val2 = matrix[i][j+1];
            int val3 = matrix[i+1][j];
            int val4 = matrix[i+1][j+1];
            // 判断这四个元素是否有两种不同的值
            if ((val1 != val2 && val1 != val3 && val1 != val4 && val2 != val3 && val2 != val4 && val3 != val4) ||
                (val1 == val2 && val1 == val3 && val1 != val4) ||
                (val1 == val2 && val1 != val3 && val1 == val4) ||
                (val1 != val2 && val1 == val3 && val1 == val4) ||
                (val2 == val3 && val2 == val4 && val2 != val1) ||
                (val2 == val3 && val2 != val4 && val2 == val1) ||
                (val2 != val3 && val2 == val4 && val2 == val1) ||
                (val3 == val4 && val3 != val1 && val3 == val2) ||
                (val3 != val4 && val3 == val1 && val3 == val2) ||
                (val4 != val3 && val4 == val1 && val4 == val2)) {
                count++;
            }
        }
    }
    cout << count << endl; // 输出满足条件的子矩阵个数
    return 0;
}
时间复杂度分析: 遍历矩阵中的每一个元素,时间复杂度为O(n * m)。 总体时间复杂度为O(n * m)
原文地址: https://www.cveoy.top/t/topic/ioo1 著作权归作者所有。请勿转载和采集!