# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
261154 |
2020-08-11T12:55:21 Z |
idk321 |
Rectangles (IOI19_rect) |
Java 11 |
|
110 ms |
11016 KB |
import java.util.Arrays;
class rect {
boolean[][] visited;
public long count_rectangles(int[][] a) {
int n = a.length;
int m = a[0].length;
if (n <= 2 || m <= 2) return 0;
boolean allZeroAndOne = true;
for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (a[i][j] != 0 && a[i][j] != 1) allZeroAndOne = false;
if (n <= 3) {
int currLength = 0;
int goodStarts = 0;
long res = 0;
for (int i = 1; i < m - 1; i++) {
int h = a[1][i];
if (a[0][i] <= h || a[2][i] <= h) {
goodStarts = 0;
} else {
if (a[1][i - 1] > h) goodStarts++;
if (a[1][i + 1] > h) res += goodStarts;
}
}
return res;
/*} else if (allZeroAndOne) {
visited = new boolean[n][m];
Arrays.fill(visited[0], true);
Arrays.fill(visited[n - 1], true);
for (int i = 0; i < n; i++) {
visited[i][0] = true;
visited[i][m - 1] = true;
}
for (int i = 1; i < n - 1; i++) {
for (int j = 1; j < m - 1; j++) {
}
} */
} else if (allZeroAndOne) {
int[][][] dpRight = new int[2][n][m];
int[][][] dpDown = new int[2][n][m];
for (int i = 1; i < n - 1; i++) {
for (int j = m - 2; j > 0; j--) {
if (a[i + 1][j] > a[i][j]) dpRight[0][i][j] = dpRight[0][i][j + 1] + 1;
if (a[i - 1][j] > a[i][j]) dpRight[1][i][j] = dpRight[1][i][j + 1] + 1;
}
}
for (int i = n - 2; i > 0; i++) {
for (int j = 1; j < m - 1; j++) {
if (a[i][j - 1] > a[i][j]) dpDown[0][i][j] = dpDown[0][i + 1][j] + 1;
if (a[i][j + 1] > a[i][j]) dpDown[1][i][j] = dpDown[1][i + 1][j] + 1;
}
}
long rect = 0;
for (int i = 1; i < n - 1; i++) {
for (int j = 1; j < m - 1; j++) {
int x = dpRight[1][i][j];
int y = dpDown[0][i][j];
if (dpRight[0][i - y + 1][j] == x && dpDown[1][i][j + x - 1] == y) rect++;
}
}
return rect;
} else {
int[][][] maxRight = new int[n][m][m];
for (int i = 1; i < n - 1; i++) {
for (int j = 1; j < m - 1; j++) {
for (int k = j; k < m - 1; k++) {
if (j == k) {
maxRight[i][j][k] = a[i][j];
} else {
maxRight[i][j][k] = Math.max(a[i][k], maxRight[i][j][k - 1]);
}
}
}
}
int[][][] maxDown = new int[m][n][n];
for (int j = 1; j < m - 1; j++) {
for (int i = 1; i < n - 1; i++) {
for (int k = i; k < n - 1; k++) {
if (i == k) {
maxDown[j][i][k] = a[i][j];
} else {
maxDown[j][i][k] = Math.max(a[k][j], maxDown[j][i][k - 1]);
}
}
}
}
long rect = 0;
for (int i = 1; i < n - 1; i++) {
for (int j = 1; j < m - 1; j++) {
for (int k = i; k < n - 1; k++) {
for (int l = j; l < m - 1; l++) {
if (maxDown[l][i][k] >= a[i - 1][l] || maxDown[l][i][k] >= a[k + 1][l]) break;
boolean shouldBreak = false;
boolean possible = true;
for (int o = i; o <= k; o++) {
if (maxRight[o][j][l] >= a[o][j - 1]) {
shouldBreak = true;
break;
}
if (maxRight[o][j][l] >= a[o][l + 1]) {
possible = false;
break;
}
}
if (shouldBreak) break;
if (possible) {
//System.out.println(i + " " + j + " " + k + " " + l);
rect++;
}
}
}
}
}
//System.out.println(Arrays.deepToString(maxDown));
//System.out.println(Arrays.deepToString(rightOk));
//System.out.println(maxDown[1][1][1]);
return rect;
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
10232 KB |
Output is correct |
2 |
Correct |
97 ms |
10660 KB |
Output is correct |
3 |
Correct |
99 ms |
10364 KB |
Output is correct |
4 |
Correct |
93 ms |
10460 KB |
Output is correct |
5 |
Runtime error |
99 ms |
10104 KB |
Execution failed because the return code was nonzero |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
10232 KB |
Output is correct |
2 |
Correct |
97 ms |
10660 KB |
Output is correct |
3 |
Correct |
99 ms |
10364 KB |
Output is correct |
4 |
Correct |
93 ms |
10460 KB |
Output is correct |
5 |
Runtime error |
99 ms |
10104 KB |
Execution failed because the return code was nonzero |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
10232 KB |
Output is correct |
2 |
Correct |
97 ms |
10660 KB |
Output is correct |
3 |
Correct |
99 ms |
10364 KB |
Output is correct |
4 |
Correct |
93 ms |
10460 KB |
Output is correct |
5 |
Runtime error |
99 ms |
10104 KB |
Execution failed because the return code was nonzero |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
10232 KB |
Output is correct |
2 |
Correct |
97 ms |
10660 KB |
Output is correct |
3 |
Correct |
99 ms |
10364 KB |
Output is correct |
4 |
Correct |
93 ms |
10460 KB |
Output is correct |
5 |
Runtime error |
99 ms |
10104 KB |
Execution failed because the return code was nonzero |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
99 ms |
11016 KB |
Output is correct |
2 |
Correct |
110 ms |
10872 KB |
Output is correct |
3 |
Correct |
100 ms |
10352 KB |
Output is correct |
4 |
Correct |
86 ms |
10104 KB |
Output is correct |
5 |
Incorrect |
103 ms |
10808 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
82 ms |
10320 KB |
Execution failed because the return code was nonzero |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
10232 KB |
Output is correct |
2 |
Correct |
97 ms |
10660 KB |
Output is correct |
3 |
Correct |
99 ms |
10364 KB |
Output is correct |
4 |
Correct |
93 ms |
10460 KB |
Output is correct |
5 |
Runtime error |
99 ms |
10104 KB |
Execution failed because the return code was nonzero |
6 |
Halted |
0 ms |
0 KB |
- |