- 荒地开垦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;
}
3 条评论
-
202607gj03盛辰 (shengchen) LV 8 @ 2026-09-12 09:30:12
#include<bits/stdc++.h> using namespace std; int a[1005][1005],m,n,cnt,maxx; int xc[5]={0,-1,1,0,0},yc[5]={0,0,0,-1,1}; bool ok; int func(int x,int y) { return (a[x+1][y]-1==1)+(a[x][y+1]-1==1)+(a[x-1][y]-1==1)+(a[x][y-1]-1==1)+(a[x][y-1]!=-1&&a[x-1][y]!=-1&&a[x][y+1]!=-1&&a[x+1][y]!=-1); } int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { char inp; cin>>inp; if (inp=='#') { a[i][j]=-1; for (int k=1;k<=4;k++) if (a[i+xc[k]][j+yc[k]]!=-1) a[i+xc[k]][j+yc[k]]++; } else a[i][j]++; } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { if (a[i][j]==1) cnt++; if (a[i][j]==-1) ok=1,maxx=max(maxx,func(i,j)); } cout<<maxx+cnt; return 0; }洛谷AC
-
@ 2026-09-12 09:11:24
#include<bits/stdc++.h> using namespace std; #define int long long int a[1005][1005],m,n,cnt,maxx; int xc[5]={0,-1,1,0,0},yc[5]={0,0,0,-1,1}; bool ok=0; int func(int x,int y) { return (a[x+1][y]-1==1)+(a[x][y+1]-1==1)+(a[x-1][y]-1==1)+(a[x][y-1]-1==1); } signed main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { char inp; cin>>inp; if (inp=='#') { a[i][j]=-1; for (int k=1;k<=4;k++) if (a[i+xc[k]][j+yc[k]]!=-1) a[i+xc[k]][j+yc[k]]++; } else a[i][j]++; } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { if (a[i][j]==1) cnt++; if (a[i][j]==-1) ok=1,maxx=max(maxx,func(i,j)); } if (ok)cout<<maxx+cnt+1; else cout<<cnt; return 0; }AC代码
-
@ 2026-09-10 22:14:29
提供一个思路:先遍历,求出f(i,j)对应位置的四个方向的障碍物的总数,保存在一个数组中,如果是荒地就用-1。统计出直接能开垦的荒地k。然后再次遍历,当遇到障碍物时,就将数组中四个位置的障碍物数-1,将新增的能开垦的荒地数保存在maxx中。如果遇到能开垦更多荒地的位置就替换。最后将k+maxx就行
- 1
信息
- ID
- 2884
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 63
- 已通过
- 14
- 通过率
- 22%
- 上传者