题型:编程题
荒地开垦
时间限制: 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
