CCF GESP 2025年3月认证 C++ 4级

编程题
共 2 道 每题 25 分 共计 50 分
第 1 题
荒地开垦
时间限制:1s 内存限制:512MB

题目描述

小杨有一大片荒地,可以表示为一个 $n$ 行 $m$ 列的网格图。

小杨想要开垦这块荒地,但荒地中一些位置存在杂物,对于一块不存在杂物的荒地,该荒地可以开垦当且仅当其上下左右四个方向相邻的格子均不存在杂物。

小杨可以选择至多一个位置,清除该位置的杂物,移除杂物后该位置变为荒地。小杨想知道在清除至多一个位置的杂物的情况下,最多能够开垦多少块荒地。

输入格式

第一行包含两个正整数 $n, m$,含义如题面所示。

之后 $n$ 行,每行包含一个长度为 $m$ 且仅包含字符 .# 的字符串。如果为 .,代表该位置为荒地;如果为 #,代表该位置为杂物。

输出格式

输出一个整数,代表在清除至多一个位置的杂物的情况下,最多能够开垦的荒地块数。

样例说明

样例 1

输入:
3 5
.....
.#..#
.....
输出:
11
样例解释:

移除第二行从左数第二块空地的杂物后:

第一行从左数前 4 块荒地,第二行从左数前 3 块荒地,第三行从左数前 4 块荒地,均可开垦,4+3+4=11。

数据范围

对于全部数据, 保证有 $1\leq n,m\leq 1000$。

第 2 题
二阶矩阵
时间限制:1s 内存限制:512MB

题目描述

小 A 有一个 $n$ 行 $m$ 列的矩阵 $A$。

小 A 认为一个 $2 \times 2$ 的矩阵 $D$ 是好的,当且仅当 $D_{1,1} \times D_{2,2} = D_{1,2} \times D_{2,1}$。其中 $D_{i,j}$ 表示矩阵 $D$ 的第 $i$ 行第 $j$ 列的元素。

小 A 想知道 $A$ 中有多少个好的子矩阵。

输入格式

第一行,两个正整数 $n, m$。

接下来 $n$ 行,每行 $m$ 个整数 $A_{i,1}, A_{i,2}, \ldots, A_{i,m}$。

输出格式

一行,一个整数,表示 $A$ 中好的子矩阵的数量。

样例说明

样例 1

输入:
3 4
1 2 1 0
2 4 2 1
0 3 3 0
输出:
2
样例解释:

样例中的好的子矩阵如下:

数据范围

对于所有测试点,保证 $1\leq n\leq 500$,$1\leq m\leq 500$,$-100\leq A_{i,j}\leq 100$

编程题部分已到底了。