直接考虑模拟,枚举每一个点作为2*2的子矩阵的左上角,然后判断是否是好矩阵即可。
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[][] g = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
g[i][j] = scanner.nextInt();
}
}
int ans = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < m - 1; j++) {
if (g[i][j] == g[i + 1][j] && g[i + 1][j] == g[i][j + 1] && g[i][j + 1] == g[i + 1][j + 1]) {
ans++;
}
}
}
System.out.println(ans);
scanner.close();
}
}
C++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> g(n, vector<int>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> g[i][j];
}
}
int ans = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < m - 1; j++) {
if (g[i][j] == g[i + 1][j] && g[i + 1][j] == g[i][j + 1] && g[i][j + 1] == g[i + 1][j + 1]) {
ans++;
}
}
}
cout << ans << endl;
return 0;
}
Python
n, m = map(int, input().split())
g = [list(map(int, input().split())) for _ in range(n)]
ans = 0
for i in range(n - 1):
for j in range(m - 1):
if g[i][j] == g[i + 1][j] and g[i + 1][j] == g[i][j + 1] and g[i][j + 1] == g[i + 1][j + 1]:
ans += 1
print(ans)
会员可通过查看《已通过》的提交记录来查看其他语言哦~
小美定义一个矩阵是”好矩阵”,当且仅当该矩阵所有元素都相同。 现在小美拿到了一个矩阵,她想知道该矩阵有多少2*2的子知阵是好矩阵?
第一行输入两个正整数n和77,代表如随的行数和列数。
接下来的n行,每行输入m个正整数a(i,j),代表小美拿到的矩阵。
1<=n,m<=100
1<=a(i,j)<=109
2*2好子知阵的数量
输入
3 3
1 2 1
1 1 1
1 1 3
输出
1
说明
只有左下角一个好子矩阵。