Submission #3222646


Source Code Expand

import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.util.InputMismatchException;
import java.io.IOException;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author prakharjain
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        OutputWriter out = new OutputWriter(outputStream);
        agc014c solver = new agc014c();
        solver.solve(1, in, out);
        out.close();
    }

    static class agc014c {
        boolean[][] vis;
        int inf = 100000;
        int r;
        int c;

        public void solve(int testNumber, InputReader in, OutputWriter out) {
            r = in.nextInt();
            c = in.nextInt();
            int k = in.nextInt();

            String[] a = new String[r];

            int si = -1;
            int sj = -1;
            for (int i = 0; i < r; i++) {
                a[i] = in.next();
                for (int j = 0; j < c; j++) {
                    if (a[i].charAt(j) == 'S') {
                        si = i;
                        sj = j;
                    }
                }
            }

            vis = new boolean[r][c];

            bfs(si, sj, a, k);

            int ans = inf;

            for (int i = 0; i < r; i++) {
                for (int j = 0; j < c; j++) {
                    if (vis[i][j]) {
                        int mind = inf;

                        mind = Math.min(mind, i);
                        mind = Math.min(mind, j);
                        mind = Math.min(mind, c - 1 - j);
                        mind = Math.min(mind, r - 1 - i);

                        int ca = (mind + k - 1) / k;

                        ans = Math.min(ans, 1 + ca);
                    }
                }
            }

            out.println(ans);
        }

        void bfs(int si, int sj, String[] a, int cd) {

            ArrayDeque<cell> dq = new ArrayDeque<>();

            dq.addLast(new cell(si, sj));
            vis[si][sj] = true;

            int[][] l = new int[r][c];
            l[si][sj] = cd;

            while (dq.size() > 0) {
                cell pc = dq.removeFirst();

                int ri = pc.i;
                int ci = pc.j;

                if (l[ri][ci] > 0) {
                    if (ri > 0 && !vis[ri - 1][ci] && a[ri - 1].charAt(ci) != '#') {
                        dq.addLast(new cell(ri - 1, ci));
                        l[ri - 1][ci] = l[ri][ci] - 1;
                        vis[ri - 1][ci] = true;
                    }
                    if (ci > 0 && !vis[ri][ci - 1] && a[ri].charAt(ci - 1) != '#') {
                        dq.addLast(new cell(ri, ci - 1));
                        l[ri][ci - 1] = l[ri][ci] - 1;
                        vis[ri][ci - 1] = true;
                    }
                    if (ci < c - 1 && !vis[ri][ci + 1] && a[ri].charAt(ci + 1) != '#') {
                        dq.addLast(new cell(ri, ci + 1));
                        l[ri][ci + 1] = l[ri][ci] - 1;
                        vis[ri][ci + 1] = true;
                    }
                    if (ri < r - 1 && !vis[ri + 1][ci] && a[ri + 1].charAt(ci) != '#') {
                        dq.addLast(new cell(ri + 1, ci));
                        l[ri + 1][ci] = l[ri][ci] - 1;
                        vis[ri + 1][ci] = true;
                    }
                }
            }

        }

        class cell {
            int i;
            int j;

            public cell(int i, int j) {
                this.i = i;
                this.j = j;
            }

        }

    }

    static class OutputWriter {
        private final PrintWriter writer;

        public OutputWriter(OutputStream outputStream) {
            writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
        }

        public OutputWriter(Writer writer) {
            this.writer = new PrintWriter(writer);
        }

        public void close() {
            writer.close();
        }

        public void println(int i) {
            writer.println(i);
        }

    }

    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;
        private InputReader.SpaceCharFilter filter;

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public static boolean isWhitespace(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public int read() {
            if (numChars == -1) {
                throw new InputMismatchException();
            }
            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }
                if (numChars <= 0) {
                    return -1;
                }
            }
            return buf[curChar++];
        }

        public int nextInt() {
            int c = read();
            while (isSpaceChar(c)) {
                c = read();
            }
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            int res = 0;
            do {
                if (c < '0' || c > '9') {
                    throw new InputMismatchException();
                }
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }

        public String nextString() {
            int c = read();
            while (isSpaceChar(c)) {
                c = read();
            }
            StringBuilder res = new StringBuilder();
            do {
                if (Character.isValidCodePoint(c)) {
                    res.appendCodePoint(c);
                }
                c = read();
            } while (!isSpaceChar(c));
            return res.toString();
        }

        public boolean isSpaceChar(int c) {
            if (filter != null) {
                return filter.isSpaceChar(c);
            }
            return isWhitespace(c);
        }

        public String next() {
            return nextString();
        }

        public interface SpaceCharFilter {
            public boolean isSpaceChar(int ch);

        }

    }
}

Submission Info

Submission Time
Task C - Closed Rooms
User leashptntl
Language Java8 (OpenJDK 1.8.0)
Score 700
Code Size 7059 Byte
Status AC
Exec Time 375 ms
Memory 45200 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 3
AC × 46
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, in1.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in2.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in3.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in4.txt, in40.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
in1.txt AC 137 ms 28660 KB
in10.txt AC 135 ms 28020 KB
in11.txt AC 133 ms 27980 KB
in12.txt AC 149 ms 29476 KB
in13.txt AC 136 ms 29008 KB
in14.txt AC 149 ms 29600 KB
in15.txt AC 139 ms 29720 KB
in16.txt AC 140 ms 27424 KB
in17.txt AC 146 ms 27424 KB
in18.txt AC 135 ms 28500 KB
in19.txt AC 137 ms 28500 KB
in2.txt AC 144 ms 28724 KB
in20.txt AC 74 ms 21460 KB
in21.txt AC 72 ms 21588 KB
in22.txt AC 74 ms 21456 KB
in23.txt AC 135 ms 30900 KB
in24.txt AC 147 ms 30420 KB
in25.txt AC 134 ms 31440 KB
in26.txt AC 145 ms 28224 KB
in27.txt AC 133 ms 30628 KB
in28.txt AC 222 ms 31108 KB
in29.txt AC 295 ms 39372 KB
in3.txt AC 139 ms 30624 KB
in30.txt AC 162 ms 32376 KB
in31.txt AC 149 ms 32976 KB
in32.txt AC 135 ms 32464 KB
in33.txt AC 358 ms 43360 KB
in34.txt AC 375 ms 45200 KB
in35.txt AC 140 ms 30292 KB
in36.txt AC 145 ms 30456 KB
in37.txt AC 149 ms 31140 KB
in38.txt AC 139 ms 28420 KB
in39.txt AC 149 ms 33272 KB
in4.txt AC 145 ms 30132 KB
in40.txt AC 132 ms 29556 KB
in5.txt AC 132 ms 29216 KB
in6.txt AC 153 ms 29888 KB
in7.txt AC 145 ms 31140 KB
in8.txt AC 140 ms 32672 KB
in9.txt AC 150 ms 29684 KB
sample1.txt AC 69 ms 19668 KB
sample2.txt AC 72 ms 20820 KB
sample3.txt AC 71 ms 18516 KB