@@ -98,6 +98,81 @@ int main() {
98
98
```
99
99
100
100
</CPPSection>
101
+ <JavaSection>
102
+
103
+ ```java
104
+ import java.io.*;
105
+ import java.util.*;
106
+
107
+ public class TripTastic {
108
+ /** @return the sum of the room capacity from (sr, sc) to (er, ec) inclusive */
109
+ static long rectSum (long [][] rPref , int sr , int er , int sc , int ec ) {
110
+ return rPref[er + 1 ][ec + 1 ] - rPref[sr ][ec + 1 ] - rPref[er + 1 ][sc ] +
111
+ rPref[sr ][sc ];
112
+ }
113
+
114
+ public static void main(String[] args) throws IOException {
115
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
116
+ PrintWriter out = new PrintWriter(System.out);
117
+
118
+ StringTokenizer st = new StringTokenizer(br.readLine());
119
+ int testNum = Integer.parseInt(st.nextToken());
120
+ for (int t = 0; t < testNum; t++) {
121
+ st = new StringTokenizer(br.readLine());
122
+ int rowNum = Integer.parseInt(st.nextToken());
123
+ int colNum = Integer.parseInt(st.nextToken());
124
+ int kidNum = Integer.parseInt(st.nextToken());
125
+
126
+ // 2D prefix sum array of the rooms
127
+ long[][] rPref = new long[rowNum + 1 ][colNum + 1 ];
128
+ for (int r = 1; r <= rowNum; r++) {
129
+ st = new StringTokenizer(br.readLine());
130
+ for (int c = 1; c <= colNum; c++) {
131
+ rPref[r ][c ] = Integer.parseInt(st.nextToken());
132
+ rPref[r ][c ] +=
133
+ rPref[r - 1 ][c ] + rPref[r ][c - 1 ] - rPref[r - 1 ][c - 1 ];
134
+ }
135
+ }
136
+
137
+ int best = -1;
138
+ for (int r = 0; r < rowNum; r++) {
139
+ for (int c = 0; c < colNum; c++) {
140
+ // Make sure the room itself can fit the mentor
141
+ if (rectSum(rPref, r, r, c, c) == 0) { continue; }
142
+
143
+ int lo = 0;
144
+ int hi = Math.max(rowNum, colNum);
145
+ int valid = -1;
146
+ while (lo <= hi) {
147
+ int mid = (lo + hi) / 2;
148
+ int sr = Math.max(0, r - mid);
149
+ int er = Math.min(rowNum - 1, r + mid);
150
+ int sc = Math.max(0, c - mid);
151
+ int ec = Math.min(colNum - 1, c + mid);
152
+ if (rectSum(rPref, sr, er, sc, ec) - 1 >= kidNum) {
153
+ valid = mid;
154
+ hi = mid - 1;
155
+ } else {
156
+ lo = mid + 1;
157
+ }
158
+ }
159
+
160
+ if (valid != -1) {
161
+ best = (best == -1 ? valid : Math .min (best , valid ));
162
+ }
163
+ }
164
+ }
165
+
166
+ out.println(best);
167
+ }
168
+
169
+ out.close();
170
+ br.close();
171
+ }
172
+ }
173
+ ```
174
+
175
+ </JavaSection>
101
176
<PySection>
102
177
103
178
```py
0 commit comments