C++11代码实现方格图好友数量统计
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;
}
代码解释:
- 使用
vector<vector<int>> grid来存储方格图,grid[i][j]表示第 i 行第 j 列的数字。 - 使用
map<int, int> count来统计每个数字出现的次数,count[x]表示数字 x 出现的次数。 - 遍历
count,对于每个数字 x,它的好友数量为count[x] - 1,因为不能与自己构成好友关系。 - 遍历所有数字,将每个数字的好友数量累加起来,即得到所有方格的好友数量之和。
代码优势:
- 代码简洁易懂,易于理解和维护。
- 使用
map数据结构,可以高效地统计每个数字出现的次数。 - 时间复杂度为 O(nm),空间复杂度为 O(nm),效率较高。
总结:
本文介绍了如何使用 C++11 代码统计一个方格图中所有方格的好友数量之和,并提供了详细的代码实现和解释。该代码简洁易懂,效率较高,适用于解决类似问题。
原文地址: https://www.cveoy.top/t/topic/qvp5 著作权归作者所有。请勿转载和采集!