#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
const int DR[4]={-1,1,0,0}, DC[4]={0,0,-1,1};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,m; if(!(cin>>n>>m)) return 0;
vector<string> g(n); for(string &s:g) cin>>s;
vector<vector<char>> vis(n, vector<char>(m,0));
long long ans = 0;
for(int r=0;r<n;++r)for(int c=0;c<m;++c)if(g[r][c]=='.'&&!vis[r][c]){
queue<pii> q; q.push({r,c}); vis[r][c]=1;
long long cnt = 0;
int a=INT_MAX,b=INT_MIN,c2=INT_MAX,d=INT_MIN; // diag bounds
while(!q.empty()){
auto [x,y]=q.front(); q.pop();
++cnt;
int p=x+y, q2=x-y;
a=min(a,p); b=max(b,p);
c2=min(c2,q2); d=max(d,q2);
for(int k=0;k<4;++k){
int nx=x+DR[k], ny=y+DC[k];
if(nx>=0&&nx<n&&ny>=0&&ny<m && g[nx][ny]=='.' && !vis[nx][ny]){
vis[nx][ny]=1; q.push({nx,ny});
}
}
}
int s=b-a; // candidate size
if(s>0 && s==d-c2 && cnt==1LL*s*s+1LL*(s-1)*(s-1))
++ans;
}
cout<<ans<<"\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |