# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
165551 | Sensei | Strah (COCI18_strah) | C++17 | 419 ms | 133820 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e3;
char a[MAXN + 7][MAXN + 7];
int n[MAXN + 7][MAXN + 7];
int ne[MAXN + 7][MAXN + 7];
int e[MAXN + 7][MAXN + 7];
int se[MAXN + 7][MAXN + 7];
int s[MAXN + 7][MAXN + 7];
int sw[MAXN + 7][MAXN + 7];
int w[MAXN + 7][MAXN + 7];
int nw[MAXN + 7][MAXN + 7];
int mat[MAXN + 7][MAXN + 7];
#define dbg(x) cerr<<#x<<" : "<<x<<" "
int main () {
int N, M;
scanf("%d %d", &N, &M);
for (int i = 1; i <= N; i++) {
scanf("\n");
for (int j = 1; j <= M; j++) {
scanf("%c", &a[i][j]);
}
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
if (a[i][j] != '.') {
continue;
}
if (a[i - 1][j] == '.') {
n[i][j] = 1 + n[i - 1][j];
}
else {
n[i][j] = 1;
}
if (a[i][j - 1] == '.') {
w[i][j] = 1 + w[i][j - 1];
}
else {
w[i][j] = 1;
}
}
for (int j = M; j >= 1; j--) {
if (a[i][j] != '.') {
continue;
}
if (a[i][j + 1] == '.') {
e[i][j] = 1 + e[i][j + 1];
}
else {
e[i][j] = 1;
}
}
}
for (int i = N; i >= 1; i--) {
for (int j = 1; j <= M; j++) {
if (a[i][j] != '.') {
continue;
}
if (a[i + 1][j] == '.') {
s[i][j] = 1 + s[i + 1][j];
}
else {
s[i][j] = 1;
}
}
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
if (a[i][j] == '.') {
nw[i][j] = 1 + max(0, nw[i - 1][j] + nw[i][j - 1] - nw[i - 1][j - 1]);
}
}
for (int j = M; j >= 1; j--) {
if (a[i][j] == '.') {
ne[i][j] = 1 + max(0, ne[i - 1][j] + ne[i][j + 1] - ne[i - 1][j + 1]);
}
}
}
for (int i = N; i >= 1; i--) {
for (int j = 1; j <= M; j++) {
if (a[i][j] == '.') {
sw[i][j] = 1 + max(0, sw[i + 1][j] + sw[i][j - 1] - sw[i + 1][j - 1]);
}
}
for (int j = M; j >= 1; j--) {
if (a[i][j] == '.') {
se[i][j] = 1 + max(0, se[i + 1][j] + se[i][j + 1] - se[i + 1][j + 1]);
}
}
}
long long ans = 0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
if (a[i][j] != '.') {
continue;
}
// dbg(i);dbg(j);
// mat[i][j] = mat[i - 1][j] + mat[i][j - 1] - mat[i - 1][j - 1] + n[i][j] + w[i][j] - 1;
// dbg(mat[i][j]);
// cerr << "\n";
// ans += mat[i][j];
// dbg(i);dbg(j);
// cerr << "\n";
// dbg(n[i][j]);dbg(e[i][j]);dbg(s[i][j]);dbg(w[i][j]);
// cerr << "\n";
// dbg(ne[i][j]);dbg(se[i][j]);dbg(sw[i][j]);dbg(nw[i][j]);
// cerr << "\n";
ans += nw[i][j] * ne[i][j] * se[i][j] * sw[i][j]
/ (
n[i][j] * e[i][j] * s[i][j] * w[i][j]
)
// + 1;
;
}
}
cout << ans << "\n";
return 0;
}
Compilation message (stderr)
# | 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... |