1 条题解
-
1
求出上图中需要的数组后,按照上图给出的计数方式枚举红色枢纽点统计即可。
#include <bits/stdc++.h> using namespace std; const int N = 1000 + 12, P = 1e4 + 7; int X[N][N][7]; // 0 - 6: input, A, B, C, D, A + D, B + D int main() { freopen("record.in", "r", stdin); freopen("record.out", "w", stdout); signed n, m; __int128 T = 0, L = 0, E = 0; scanf("%d %d ", &n, &m); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { char c; scanf("%c ", &c); if (c == 'G') X[i][j][0] = 1; } for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (X[i][j][0]) X[i][j][1] = X[i - 1][j][1] + 1; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) X[i][j][1] = max(X[i][j][1] - 1, 0); for (int i = n; i >= 1; i--) for (int j = 1; j <= m; j++) if (X[i][j][0]) X[i][j][2] = X[i + 1][j][2] + 1; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) X[i][j][2] = max(X[i][j][2] - 1, 0); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (X[i][j][0]) X[i][j][3] = X[i][j - 1][3] + 1; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) X[i][j][3] = max(X[i][j][3] - 1, 0); for (int i = 1; i <= n; i++) for (int j = m; j >= 1; j--) if (X[i][j][0]) X[i][j][4] = X[i][j + 1][4] + 1; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) X[i][j][4] = max(X[i][j][4] - 1, 0); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (X[i][j][0]) X[i][j][5] = X[i - 1][j][5] + X[i - 1][j][4]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (X[i][j][0]) X[i][j][5] -= X[i - 1][j][4]; for (int i = n; i >= 1; i--) for (int j = 1; j <= m; j++) if (X[i][j][0]) X[i][j][6] = X[i + 1][j][6] + X[i + 1][j][4]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (X[i][j][0]) X[i][j][6] -= X[i + 1][j][4]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) T += (__int128) X[i][j][2] * X[i][j][3] * X[i][j][4]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) L += (__int128) X[i][j][1] * X[i][j][4]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) E += (__int128) X[i][j][4] * X[i][j][5] * X[i][j][6]; T %= P, L %= P, E %= P; cout << (int) T << ' ' << (int) L << ' ' << (int) E << endl; return 0; }
- 1
信息
- ID
- 154
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 15
- 已通过
- 4
- 上传者