trang chủ / đề bài / icpc21_bt_a

Một bài toán kinh điển

Đề bài

Mô tả

Các bài toán kinh điển trong lập trình thi đấu là những bài thường xuyên xuất hiện trong các kỳ thi lập trình. Bài toán này cũng là một bài rất kinh điển trong lĩnh vực hình học tính toán: xác định những điểm nào bị một đa giác đơn cho trước phủ.

Để phát biểu bài toán chính xác, trước hết ta định nghĩa đa giác. Một đa giác có n cạnh được mô tả bởi n đoạn thẳng e1,e2,…,en nối với nhau thành một chu trình khép kín. Tức là tồn tại một dãy đỉnh v1=(x1,y1),v2=(x2,y2),…,vn=(xn,yn) sao cho en=vnv1 và ei=vivi+1 với 1≤i<n. Như vậy ta có thể xác định một đa giác bằng dãy đỉnh như trên.

Một đa giác đơn là một đa giác không tự cắt, tức là hai đoạn thẳng bất kỳ chỉ có thể gặp nhau tại đầu mút của chúng. Do đó một đa giác đơn bao quanh một miền gọi là miền trong của nó. Một điểm p được đa giác đơn P phủ khi và chỉ khi p nằm trên một cạnh nào đó của P hoặc nằm trong miền trong của P.

Trong bài này, bạn được cho một đa giác đơn có n cạnh, xác định bởi một dãy đỉnh, và m điểm trên mặt phẳng. Hãy viết chương trình xác định những điểm nào được đa giác đơn đã cho phủ.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên dương n và m: số cạnh của đa giác đơn và số điểm.
  • Với 1≤i≤n, dòng thứ i+1 chứa hai số nguyên xi và yi, trong đó vi=(xi,yi) là phần tử thứ i của dãy mô tả đa giác.
  • Với 1≤j≤m, dòng thứ 1+n+j chứa hai số nguyên Xj và Yj: điểm pj=(Xj,Yj) cần kiểm tra.

Dữ liệu ra

In ra m dòng. Dòng thứ j ghi YES nếu pj được đa giác đơn xác định bởi dãy v1,v2,…,vn phủ, ngược lại ghi NO.

Ràng buộc

  • 3≤n≤105.
  • 1≤m≤105.
  • Dãy v1,v2,…,vn luôn xác định một đa giác đơn.
  • xi,yi∈[−109,109] với 1≤i≤n.
  • Xj,Yj∈[−109,109] với 1≤j≤m.

Ví dụ

Input Output Giải thích
3 3
0 0
5 5
5 0
1 1
1 2
2 1
YES
NO
YES
Điểm (1,1) nằm trên cạnh nối (0,0) và (5,5); điểm (2,1) nằm trong tam giác; điểm (1,2) nằm ngoài.
4 4
0 0
1 1
2 0
1 5
1 0
1 1
1 2
1 3
NO
YES
YES
YES
Điểm (1,1) là một đỉnh; (1,2) và (1,3) nằm trong đa giác; (1,0) nằm ngoài.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0