Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.*;
- public class newClass {
- public static void main(String[] args) throws IOException {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- int[] dimensions = Arrays.stream(reader.readLine().split("\\s+"))
- .mapToInt(Integer::parseInt)
- .toArray();
- int rows = dimensions[0];
- int cols = dimensions[1];
- boolean[][] parking = new boolean[rows][cols];
- for (int i = 0; i < rows; i++) {
- parking[i][0] = true;
- }
- String line;
- while (!"stop".equals(line = reader.readLine())) {
- int[] data = Arrays.stream(line.split("\\s+"))
- .mapToInt(Integer::parseInt)
- .toArray();
- int entryRow = data[0];
- int desiredRow = data[1];
- int desiredCol = data[2];
- int countSteps = Math.abs(desiredRow - entryRow) + 1;
- if (!parking[desiredRow][desiredCol]) {
- countSteps += desiredCol;
- parking[desiredRow][desiredCol] = true;
- System.out.println(countSteps);
- } else {
- if (thereIsAParkingSlotAvailable(desiredRow, cols, parking)) {
- int leftClosestIndex = -1;
- int rightClosestIndex = -1;
- int closestIndex = -1;
- if (desiredCol != 1 && desiredCol != cols - 1) {
- leftClosestIndex = getLeftClosestIndex(parking[desiredRow], desiredCol, leftClosestIndex);
- rightClosestIndex = getRightClosestIndex(cols, parking[desiredRow], desiredCol, rightClosestIndex);
- if (rightClosestIndex - desiredCol < desiredCol - leftClosestIndex && rightClosestIndex != -1) {
- closestIndex = rightClosestIndex;
- } else {
- closestIndex = leftClosestIndex;
- }
- } else if (desiredCol == 1) {
- closestIndex = getRightClosestIndex(cols, parking[desiredRow], desiredCol, rightClosestIndex);
- } else if (desiredCol == cols - 1) {
- closestIndex = getLeftClosestIndex(parking[desiredRow], desiredCol, leftClosestIndex);
- }
- parking[desiredRow][closestIndex] = true;
- countSteps += closestIndex;
- System.out.println(countSteps);
- } else {
- System.out.printf("Row %d full%n", desiredRow);
- }
- }
- }
- }
- private static int getRightClosestIndex(int cols, boolean[] row, int desiredCol, int rightClosestIndex) {
- for (int i = desiredCol + 1; i < cols; i++) {
- if (!row[i]) {
- rightClosestIndex = i;
- break;
- }
- }
- return rightClosestIndex;
- }
- private static int getLeftClosestIndex(boolean[] row, int desiredCol, int leftClosestIndex) {
- for (int i = desiredCol - 1; i > 0; i--) {
- if (!row[i]) {
- leftClosestIndex = i;
- break;
- }
- }
- return leftClosestIndex;
- }
- private static boolean thereIsAParkingSlotAvailable(int desiredRow, int cols, boolean[][] parking) {
- boolean available = false;
- for (int i = 0; i < cols; i++) {
- if (!parking[desiredRow][i]) {
- available = true;
- break;
- }
- }
- return available;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement