题目背景
对应的选择、判断题:试题 - GESP 202503 C++ 四级 - 洛谷有题
题目描述
小 A 有一个 n 行 m 列的矩阵 A。
小 A 认为一个 2×2 的矩阵 D 是好的,当且仅当 D1,1×D2,2=D1,2×D2,1。其中 Di,j 表示矩阵 D 的第 i 行第 j 列的元素。
小 A 想知道 A 中有多少个好的子矩阵。
输入格式
第一行,两个正整数 n,m。
接下来 n 行,每行 m 个整数 Ai,1,Ai,2,...,Ai,m。
输出格式
一行,一个整数,表示 A 中好的子矩阵的数量。
输入输出样例
输入 #1复制
3 4
1 2 1 0
2 4 2 1
0 3 3 0
输出 #1复制
2
说明/提示
样例解释
样例中好的子矩阵如下:

数据范围
对于所有测试点,保证 1≤n≤500,1≤m≤500,−100≤Ai,j≤100
代码实现:
cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector<vector<int> > a(n,vector<int>(m));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
long long ans=0;
for(int i=0;i<=n-2;i++)
{
for(int j=0;j<=m-2;j++)
{
long long d11 = a[i][j];
long long d12 = a[i][j+1];
long long d21 = a[i+1][j];
long long d22 = a[i+1][j+1];
if(d11 * d22 == d12 * d21)
ans++;
}
}
cout<<ans<<endl;
return 0;
}