1 条题解
-
0
版本质检员二代#include<bits/stdc++.h> using namespace std; char a[1001][1001];//存土地 int dx[4]={0,0,1,-1};//方向数组 int dy[4]={1,-1,0,0};//方向数组 int n,m; bool check(int x,int y){ for(int i=0;i<4;i++){ int nx=x+dx[i],ny=y+dy[i];//康其他地方 if(nx<0||nx>n||ny<0||ny>m) continue;//是边缘,不判断 if(a[nx][ny]=='#') return 0;//有杂物,该罚 } return 1;//过关! } int main(){ cin>>n>>m;//输入 for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j];//输入 } } int s=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='.' && check(i,j)) s++;//算点的数量 } } int maxx=-1e9;//擂台 for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ int t=0;//算开垦之后有几个子 if(a[i][j]=='#'){ a[i][j]='.';//开垦 if(check(i,j)) t++; for(int k=0;k<4;k++){ int nx=i+dx[k],ny=j+dy[k]; if(nx<1||nx>n||ny<1||ny>m) continue; if(a[nx][ny]=='.' && check(nx,ny)) t++; }//同check函数 a[i][j]='#';//时间倒流 } maxx=max(maxx,t);//擂台 } } cout<<s+maxx;//输出 return 0;//完美 }
- 1
信息
- ID
- 1345
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者