C++11代码实现方格图好友数量统计

问题描述:

小 C 有一个 n 行 m 列的方格图,每个方格中都有一个数字,其中第 i 行第 j 列的方格中的数字为 ai,j。两个不同的方格不相邻,当且仅当这两个方格没有公共边。两个不同的方格互为好朋友,当且仅当这两个方格不相邻且这两个方格中的数字相同。你需要求出,所有方格的好朋友的数量之和是多少。

输入格式:

第一行两个整数 n,m。 接下来 n 行,每行 m 个整数,其中第 i 行的第 j 个整数表示 ai,j。

输出格式:

一个整数,表示所有方格的好朋友的数量之和。

输入输出样例:

输入 #1
3 4
1 1 4 5
2 1 2 3
3 1 4 1
输出 #1
20

C++11代码实现:

#include <iostream>
#include <vector>
#include <map>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    
    vector<vector<int>> grid(n, vector<int>(m));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> grid[i][j];
        }
    }
    
    map<int, int> count;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            count[grid[i][j]]++;
        }
    }
    
    int sum = 0;
    for (auto it = count.begin(); it != count.end(); it++) {
        sum += it->second * (it->second - 1);
    }
    
    cout << sum << endl;
    
    return 0;
}

代码解释:

  1. 使用 vector<vector<int>> grid 来存储方格图,grid[i][j] 表示第 i 行第 j 列的数字。
  2. 使用 map<int, int> count 来统计每个数字出现的次数,count[x] 表示数字 x 出现的次数。
  3. 遍历 count,对于每个数字 x,它的好友数量为 count[x] - 1,因为不能与自己构成好友关系。
  4. 遍历所有数字,将每个数字的好友数量累加起来,即得到所有方格的好友数量之和。

代码优势:

  1. 代码简洁易懂,易于理解和维护。
  2. 使用 map 数据结构,可以高效地统计每个数字出现的次数。
  3. 时间复杂度为 O(nm),空间复杂度为 O(nm),效率较高。

总结:

本文介绍了如何使用 C++11 代码统计一个方格图中所有方格的好友数量之和,并提供了详细的代码实现和解释。该代码简洁易懂,效率较高,适用于解决类似问题。

C++11代码实现方格图好友数量统计

原文地址: https://www.cveoy.top/t/topic/qvp5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录