> 技术文档 > CCF-GESP计算机学会等级考试2025年3月四级C++T2 二阶矩阵_gesp二阶矩阵

CCF-GESP计算机学会等级考试2025年3月四级C++T2 二阶矩阵_gesp二阶矩阵


B4264 [GESP202503 四级] 二阶矩阵

题目描述

小 A 有一个 nnnmmm 列的矩阵 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

说明/提示

样例解释

样例中好的子矩阵如下:

CCF-GESP计算机学会等级考试2025年3月四级C++T2 二阶矩阵_gesp二阶矩阵

数据范围

对于所有测试点,保证 1≤n≤5001\\leq n\\leq 5001n5001≤m≤5001\\leq m\\leq 5001m500−100≤Ai,j≤100-100\\leq A_{i,j}\\leq 100100Ai,j100

解析

模拟,详见代码:

#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;}