#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <cmath>
using namespace std;
struct node
{
long long x, y;
} a[100005], b[100005];
long long mul(node p1, node p2, node p3)
{
return(p2.x-p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x);
}
int main()
{
int n, m, i, low, high, mid, flag;
while(scanf("%d",&n) != EOF)
{
for( int i = 0; i < n; i++)
scanf("%lld%lld",&a[i].x, &a[i].y);
scanf("%d",&m);
for( int i = 0; i < m; i++)
scanf("%lld%lld",&b[i].x, &b[i].y);
flag = 0;
for( int i = 0; i < m; i++)
{
//先判断是否在第一条边外
if(mul(a[0], a[1], b[i]) >= 0 || mul(a[0], a[n-1], b[i]) <= 0)
{
flag = 1;
goto loop;
}
//二分
low = 2;
high = n - 1;
while(low < high)
{
mid = (low + high) >> 1;
if(mul(a[0], a[mid], b[i]) > 0)
high = mid;
else low = mid + 1;
}
//判断最终结果
if(mul(a[low], a[low - 1], b[i]) <= 0)
{
flag = 1;
goto loop;
}
}
loop : if(flag) puts("NO");
else puts("YES");
}
return 0;
}
hrbust 1429
最新推荐文章于 2019-03-15 22:41:00 发布