Skip to content

Commit b851991

Browse files
Merge pull request #5165 from JoltedCowIceCream/patch-10
TripTastic Java Solution
2 parents e47d007 + 6f78ad5 commit b851991

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

solutions/silver/cc-TRPTSTIC.mdx

+75
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,81 @@ int main() {
9898
```
9999

100100
</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>
101176
<PySection>
102177

103178
```py

0 commit comments

Comments
 (0)