Submission #5555937


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.Collection;
import java.util.InputMismatchException;
import java.io.IOException;
import java.util.stream.Collectors;
import java.util.Stack;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import java.util.Vector;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 */
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);
        EConnected solver = new EConnected();
        solver.solve(1, in, out);
        out.close();
    }

    static class EConnected {
        public void solve(int testNumber, InputReader in, OutputWriter out) {
            int r = in.readInt();
            int c = in.readInt();
            int n = in.readInt();

            List<IntIntPair> list1 = new ArrayList<>();
            List<IntIntPair> list2 = new ArrayList<>();
            List<IntIntPair> list3 = new ArrayList<>();
            List<IntIntPair> list4 = new ArrayList<>();

            out:
            for (int i = 0; i < n; i++) {
                int[][] a = in.readIntTable(2, 2);
                for (int j = 0; j < 2; j++) {
                    if (a[j][0] != 0 && a[j][0] != r && a[j][1] != 0 && a[j][1] != c) continue out;
                }
                for (int j = 0; j < 2; j++) {
                    if (a[j][0] > 0 && a[j][1] == 0) list1.add(new IntIntPair(a[j][0], i));
                    if (a[j][0] == r && a[j][1] > 0) list2.add(new IntIntPair(a[j][1], i));
                    if (a[j][0] < r && a[j][1] == c) list3.add(new IntIntPair(a[j][0], i));
                    if (a[j][0] == 0 && a[j][1] < c) list4.add(new IntIntPair(a[j][1], i));
                }
            }

            list1.sort(Comparator.naturalOrder());
            list2.sort(Comparator.naturalOrder());
            list3.sort(Comparator.reverseOrder());
            list4.sort(Comparator.reverseOrder());

            List<Integer> all = Stream.of(list1, list2, list3, list4)
                    .flatMap(Collection::stream)
                    .map(p -> p.second)
                    .collect(Collectors.toList());

            Stack<Integer> stack = new Stack<>();
            for (int x : all) {
                if (stack.empty() || x != stack.peek()) {
                    stack.push(x);
                } else {
                    stack.pop();
                }
            }

            out.printLine(stack.size() == 0 ? "YES" : "NO");
        }

    }

    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 int[][] readIntTable(int rowCount, int columnCount) {
            int[][] table = new int[rowCount][];
            for (int i = 0; i < rowCount; i++) {
                table[i] = readIntArray(columnCount);
            }
            return table;
        }

        public int[] readIntArray(int size) {
            int[] array = new int[size];
            for (int i = 0; i < size; i++) {
                array[i] = readInt();
            }
            return array;
        }

        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 readInt() {
            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 boolean isSpaceChar(int c) {
            if (filter != null) {
                return filter.isSpaceChar(c);
            }
            return isWhitespace(c);
        }

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

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

        }

    }

    static class IntIntPair implements Comparable<IntIntPair> {
        public final int first;
        public final int second;

        public IntIntPair(int first, int second) {
            this.first = first;
            this.second = second;
        }

        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }

            IntIntPair pair = (IntIntPair) o;

            return first == pair.first && second == pair.second;
        }

        public int hashCode() {
            int result = first;
            result = 31 * result + second;
            return result;
        }

        public String toString() {
            return "(" + first + "," + second + ")";
        }

        public int compareTo(IntIntPair o) {
            int value = Integer.compare(first, o.first);
            if (value != 0) {
                return value;
            }
            return Integer.compare(second, o.second);
        }

    }

    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 print(Object... objects) {
            for (int i = 0; i < objects.length; i++) {
                if (i != 0) {
                    writer.print(' ');
                }
                writer.print(objects[i]);
            }
        }

        public void printLine(Object... objects) {
            print(objects);
            writer.println();
        }

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

    }
}

Submission Info

Submission Time
Task E - Connected?
User amotoma3
Language Java8 (OpenJDK 1.8.0)
Score 700
Code Size 7420 Byte
Status AC
Exec Time 672 ms
Memory 49300 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 4
AC × 38
Set Name Test Cases
Sample s1.txt, s2.txt, s3.txt, s4.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 43.txt, 44.txt, 45.txt, 46.txt, s1.txt, s2.txt, s3.txt, s4.txt
Case Name Status Exec Time Memory
01.txt AC 522 ms 46244 KB
02.txt AC 453 ms 41732 KB
03.txt AC 442 ms 43484 KB
04.txt AC 357 ms 35368 KB
05.txt AC 435 ms 45120 KB
06.txt AC 672 ms 49300 KB
07.txt AC 281 ms 32788 KB
08.txt AC 447 ms 47092 KB
09.txt AC 387 ms 36720 KB
10.txt AC 521 ms 46668 KB
11.txt AC 483 ms 48048 KB
12.txt AC 240 ms 32280 KB
13.txt AC 296 ms 40272 KB
14.txt AC 408 ms 42708 KB
15.txt AC 462 ms 42656 KB
16.txt AC 336 ms 34708 KB
17.txt AC 265 ms 34556 KB
18.txt AC 302 ms 36012 KB
19.txt AC 374 ms 41240 KB
20.txt AC 553 ms 43792 KB
21.txt AC 439 ms 40560 KB
22.txt AC 434 ms 45004 KB
23.txt AC 552 ms 47364 KB
24.txt AC 575 ms 47004 KB
25.txt AC 587 ms 44108 KB
26.txt AC 600 ms 48476 KB
27.txt AC 534 ms 43580 KB
28.txt AC 577 ms 44076 KB
29.txt AC 546 ms 46300 KB
30.txt AC 543 ms 45544 KB
43.txt AC 164 ms 23760 KB
44.txt AC 161 ms 24144 KB
45.txt AC 220 ms 26196 KB
46.txt AC 159 ms 26580 KB
s1.txt AC 160 ms 23892 KB
s2.txt AC 164 ms 26452 KB
s3.txt AC 161 ms 24532 KB
s4.txt AC 153 ms 24012 KB