1 条题解
-
0
思路
逐个访问每一坨冰淇淋,对于每一个点,如果它一个方向上有冰淇淋,就继续往下访问,否则就是访问到边界了,周长加1
代码
#include<bits/stdc++.h> using namespace std; const int N=1100; int dx[4]={1,0,-1,0}; int dy[4]={0,-1,0,1}; char s[N]; bool a[N][N],v[N][N]; int n; pair<int,int> dfs(int x,int y) { if(v[x][y])return {0,0}; v[x][y]=1; int res=1,c=0; for(int i=0;i<=3;i++) { int xx=x+dx[i],yy=y+dy[i]; if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&a[xx][yy]) { pair<int,int> no=dfs(xx,yy); res+=no.first,c+=no.second; } else c++; } return {res,c}; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",s+1); for(int j=1;j<=n;j++)a[i][j]=(s[j]=='#'); } int ma=0,ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++)if(!v[i][j]&&a[i][j]) { pair<int,int> no=dfs(i,j); if(no.first>ma)ma=no.first,ans=no.second; else if(no.first==ma)ans=min(ans,no.second); } } printf("%d %d\n",ma,ans); return 0; }
- 1
信息
- ID
- 6967
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者