Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024

2020-2022 2023 Regulations Schedule RODO info Ranking

Problem description


Punkty w wielokącie
(punkty-w-wielokacie)
Memory limit: 256 MB
Time limit: 1.00 s

Dany jest wielokąt wypukły o N wierzchołkach, które są podane w kolejności przeciwnej do ruchu wskazówek zegara. Twoim zadaniem jest napisać program, które na każde z Q zapytań odpowie, czy dany punkt należy do wielokąta (znajduje się wewnątrz niego, na jednej z jego krawędzi lub pokrywa się z jednym z jego wierzchołków).

Wejście

W pierwszym wierszu wejścia znajduje się jedna liczba naturalna N, oznaczająca liczbę wierzchołków wielokąta. Następnie znajduje się N wierszy, i-ty z nich zawiera dwie liczby całkowite oddzielone pojedynczym odstępem: xi oraz yi - współrzędne i-tego wierzchołka wielokąta.

Kolejny wiersz zawiera jedną liczbę całkowitą Q, oznaczającą liczbę zapytań. Następnie znajduje się N wierszy, j-ty z nich zawiera dwie liczby całkowite oddzielone pojedynczym odstępem: xj oraz yj - współrzędne punktu w j-tym zapytaniu.

Wyjście

Twój program powinien wypisać Q wierszy. W j-tym wierszu ma wypisać TAK, gdy punkt z j-tego zapytania należy do wielokąta lub NIE w przeciwnym przypadku.

Ograniczenia

3 ≤ N, Q ≤ 100 000,  − 108 ≤ xi, yi, xj, yj ≤ 108

Przykład

Input Output
4
0 0
5 0
5 5
0 5
3
0 0
3 3
10 10
TAK
TAK
NIE