# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
165555 | Sensei | Strah (COCI18_strah) | C++17 | 542 ms | 255756 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e3;
char a[MAXN + 7][MAXN + 7];
long long n[MAXN + 7][MAXN + 7];
long long ne[MAXN + 7][MAXN + 7];
long long e[MAXN + 7][MAXN + 7];
long long se[MAXN + 7][MAXN + 7];
long long s[MAXN + 7][MAXN + 7];
long long sw[MAXN + 7][MAXN + 7];
long long w[MAXN + 7][MAXN + 7];
long long 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(0LL, 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(0LL, 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(0LL, 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(0LL, 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;
}
컴파일 시 표준 에러 (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... |