#include<bits/stdc++.h>
using namespace std;
using ll=long long;
constexpr int MAXN=2e3+5;
int n,m;
string s[MAXN];
int high[MAXN][MAXN];
int l[MAXN][MAXN],r[MAXN][MAXN];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>s[i];
s[i]='#'+s[i]+'#';
for(int j=1;j<=m;++j)
high[i][j]=(s[i][j]=='.'?high[i-1][j]+1:0);
}
ll ans=0;
for(int i=1;i<=n;++i){
stack<int>S;
for(int j=1;j<=m;++j){
while(!S.empty() and high[i][S.top()]>=high[i][j])S.pop();
l[i][j]=S.empty()?1:S.top()+1;
S.push(j);
}
S=stack<int>();
for(int j=m;j>=1;--j){
while(!S.empty() and high[i][S.top()]>high[i][j])S.pop();
r[i][j]=S.empty()?m:S.top()-1;
S.push(j);
}
for(int j=1;j<=m;++j){
ll x=j-l[i][j]+1;
ll y=r[i][j]-j+1;
ans+=1ll*high[i][j]*(high[i][j]+1ll)*x*y*(x+y)/4;
}
}
cout<<ans<<'\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |