- 荒地开垦2025.3GESP4级T1
- @ 2026-09-10 20:05:30
#include<bits/stdc++.h>
using namespace std;
int n,m,ans,pd;
char g[1001][1001];
int main( )
{
cin>>n>>m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
cin>>g[i][j];
for (int i=1;i<=n;i++)
{
int ok=0;
for (int j=1;j<=n;j++)
{
if (pd=0)
{
if (g[i][j]=='#')
ok=1;
if (g[i-1][j+1]=='#')
ok=0;
if (g[i-1][j]=='#')
ok=0;
if (g[i-1][j-1]=='#')
ok=0;
if (g[i+1][j+1]=='#')
ok=0;
if (g[i+1][j-1]=='#')
ok=0;
if (g[i+1][j]=='#')
ok=0;
if (g[i][j+1]=='#')
ok=0;
if (g[i][j-1]=='#')
ok=0;
if (ok)
g[i][j]='.',pd=1;
}
}
}
if (pd=0)
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (g[i][j]=='#')
{
g[i][j]='.';
break;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (g[i-1][j]=='.' && g[i+1][j]=='.' && g[i][j+1]=='.' && g[i][j-1]=='.')
ans++;
cout<<ans;
return 0;
}
1 条评论
-
202607gj03盛辰 (shengchen) LV 8 @ 2026-09-10 22:14:29
提供一个思路:先遍历,求出f(i,j)对应位置的四个方向的障碍物的总数,保存在一个数组中,如果是荒地就用-1。统计出直接能开垦的荒地k。然后再次遍历,当遇到障碍物时,就将数组中四个位置的障碍物数-1,将新增的能开垦的荒地数保存在maxx中。如果遇到能开垦更多荒地的位置就替换。最后将k+maxx就行
- 1
信息
- ID
- 2884
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 59
- 已通过
- 12
- 通过率
- 20%
- 上传者