For more information, see bloghttp: // hi.baidu.com/aekdycoin/blog/item/7abf85026f0d7e85d43f7cfe.html.
Complexity is O (nlgn)
# Define n 100005 struct node {Double X, Y;} A [100005]; double cross (node A, Node B, node c) {//> 0, AB in AC clockwise; <0, AB in AC return (B. x-a.x) * (C. y-a.y)-(C. x-a.x) * (B. y-a.y);} int n, m; bool chk (Node B) {int I, j; If (Cross (A [0], B, A [1]) <= 0) return false; If (Cross (A [0], B, A [n-1])> = 0) return false; int L = 0, r = n-1, mid; int tag = 0; while (L <= r) {mid = (L + r)> 1; if (Cross (A [0], B, A [Mid])> = 0) {tag = mid; L = Mid + 1;} else r = mid-1;} l = tag, r = tag + 1; if (Cross (A [L], B, A [R]) <= 0) return false; return true;} int main () {CIN> N; int I, j; for (I = 0; I <n; I ++) {CIN> A [I]. x> A [I]. y;} int ans = 0; CIN> m; Node B; for (I = 0; I <m; I ++) {CIN> B. x> B. y; If (chk (B) ans ++;} If (ANS = m) cout <"yes" <Endl; else cout <"no" <Endl; return 0 ;}