万卷网 > 题目详情
题型:编程题

荒地开垦

时间限制: 1.0 s

内存限制 :512.0 MB

题面描述

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

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

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

输入格式

第—行包含两个正整数  n ,  m ,含义如题面所⽰。

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

输出格式

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

输入样例

3 5
.....
.#..#
.....

输出样例

11

样例解释

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

.....
....#
.....

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

数据范围

对于全部数据,保证有  1 ≤ n, m ≤ 1000 。

更新时间:2025-06-27 16:54:18 |
【知识点】 CCF—GESP C++四级

相似题推荐

判断题

下面程序执行后输出 2010 。

int x = 10; 
void f() { int x = 20; cout << x; } 

int main() { 
    f(); 
    cout << x; 
}
A.正确 B.错误
2026-09-29
判断题

下面程序可以正常编译并输出 10 。

int calc(int x, int y = 10); 
int calc(int x) { return x * 2; } 
int calc(int x, int y) { return x * y; } 

int main() { 
    cout << calc(5); 
}
A.正确 B.错误
2026-09-29
判断题

下面程序能够把 Hello 写入 data.txt 文件中。

ofstream fout("data.txt"); 
cout << "Hello"; 
fout.close();
A.正确 B.错误
2026-09-29
单选题

执行 climb(6) 的返回值为( )。

int climb(int n){ 
    if(n <= 2) return n; 
    int a = 1, b = 2, c = 0; 
    for(int i = 3; i <= n; i++){ 
        c = a + b; 
        a = b; 
        b = c; 
    } 
    return c; 
    }
A.

8

B.

13

C.

5

D.

10

2026-09-29
单选题

已知:

int a[3][4] = { 
    {1,2,3,4}, 
    {5,6,7,8}, 
    {9,10,11,12} 
}; 
int (*p)[4] = a;

则表达式 *(*(p + 2) + 1) 的值为( )。

A.

6

B.

10

C.

9

D.

11

2026-09-29
公众号
客服 反馈
顶部