#include <stdio.h>
#define N 2222
long long z;
char s[N][N];
int y, n, m, h[N][N], sta[N], top, l[N], r[N];
void dfs(int u, int ll, int rr) {
if (ll > rr)
return;
long long L = u - ll, R = rr - u;
z += ((R + 1) * (L + 2) * (L + 1) / 2
+ (L + 1) * (R + 0) * (R + 1) / 2) * (h[y][u] * (h[y][u] + 1ll) / 2);
dfs(l[u], ll, u - 1);
dfs(r[u], u + 1, rr);
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) {
scanf("%s", s[i] + 1);
for (int j = 1; j <= m; ++j) {
l[j] = r[j] = 0;
h[i][j] = h[i - 1][j] + (s[i][j] == '.');
if (s[i][j] == '#')
h[i][j] = 0;
}
top = 0;
for (int j = 1; j <= m; ++j) {
int k = top;
while (k && h[i][sta[k]] > h[i][j]) {
--k;
}
if (k + 1 <= top) {
l[j] = sta[k + 1];
}
if (k)
r[sta[k]] = j;
sta[top = ++k] = j;
}
y = i;
dfs(sta[1], 1, m);
}
printf("%lld\n", z);
return 0;
}
Compilation message (stderr)
strah.c: In function 'main':
strah.c:23:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
23 | scanf("%d%d", &n, &m);
| ^~~~~~~~~~~~~~~~~~~~~
strah.c:26:17: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
26 | scanf("%s", s[i] + 1);
| ^~~~~~~~~~~~~~~~~~~~~
# | 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... |