CCF-GESP计算机学会等级考试2025年3月四级C++T2 二阶矩阵_gesp二阶矩阵
B4264 [GESP202503 四级] 二阶矩阵
题目描述
小 A 有一个 nnn 行 mmm 列的矩阵 AAA。
小 A 认为一个 2×22 \\times 22×2 的矩阵 DDD 是好的,当且仅当 D1,1×D2,2=D1,2×D2,1D_{1,1} \\times D_{2,2} = D_{1,2} \\times D_{2,1}D1,1×D2,2=D1,2×D2,1。其中 Di,jD_{i,j}Di,j 表示矩阵 DDD 的第 iii 行第 jjj 列的元素。
小 A 想知道 AAA 中有多少个好的子矩阵。
输入格式
第一行,两个正整数 n,mn, mn,m。
接下来 nnn 行,每行 mmm 个整数 Ai,1,Ai,2,…,Ai,mA_{i,1}, A_{i,2}, \\ldots, A_{i,m}Ai,1,Ai,2,…,Ai,m。
输出格式
一行,一个整数,表示 AAA 中好的子矩阵的数量。
输入输出样例 #1
输入 #1
3 41 2 1 02 4 2 10 3 3 0
输出 #1
2
说明/提示
样例解释
样例中好的子矩阵如下:
数据范围
对于所有测试点,保证 1≤n≤5001\\leq n\\leq 5001≤n≤500,1≤m≤5001\\leq m\\leq 5001≤m≤500,−100≤Ai,j≤100-100\\leq A_{i,j}\\leq 100−100≤Ai,j≤100
解析
模拟,详见代码:
#includeusing namespace std;int n, m;int a[505][505];int ans = 0;int main() { cin >> n >> m; for(int i = 1; i <= n; i++) { //输入 for(int j = 1; j <= m; j++) { cin >> a[i][j]; } } for(int i = 1; i < n; i++) { //循环判断是否为好子矩阵 for(int j = 1; j < m; j++) { if (a[i][j]*a[i + 1][j + 1] == a[i + 1][j]*a[i][j + 1]) { ans++; } } } cout << ans; return 0;}