【计算几何】Codeforces Round #113 (Div. 2)-B. Polygons

原创 2012年03月28日 21:14:53

其实是很裸的一道几何题,题目要求的就是判断一个小的多边形是否完全且严格(两个多边形不能有交点)包含在另一个凸多边形里面。而解决的方法有很多,我这里用到的就是判断一个点是否完全且严格包含在一个多边形内,判断的时候用到了二分和叉积。

题目

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 100005
struct node
{
    int x,y;
}p[N];
__int64 xcross(node t,node t1,node t2)
{
    return (__int64)(t1.x-t.x)*(t2.y-t.y)-(__int64)(t2.x-t.x)*(t1.y-t.y);
}
int n;
bool check(node t)
{
    if(xcross(t,p[0],p[n-1])==0)return false;            //判断是否在线(0,1)上
    if(xcross(t,p[1],p[0])==0)return false;            //判断是否在线(0,n-1)上
    int l=0,r=n-1,best;
    while(l<=r)
    {
        int m=(l+r)/2;
        if(xcross(t,p[m],p[0])>=0)
        {
            best=m;            //这里得到的best是和点t最接近的那条边的一段
            l=m+1;
        }
        else r=m-1;
    }
    if(xcross(t,p[best],p[best+1])>=0)return false;            //判断点t在线(best,best+1)的那一边
    return true;
}
int main()
{
    //freopen("a.txt","r",stdin);
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%d%d",&p[i].x,&p[i].y);
    int m;
    scanf("%d",&m);
    bool flag=true;
    while(m--)
    {
        node t;
        scanf("%d%d",&t.x,&t.y);
        if(flag)flag=check(t);
    }
    if(flag)printf("YES\n");
    else printf("NO\n");
    return 0;
}


相关文章推荐

Codeforces Round #291 (Div. 2) -- B. Han Solo and Lazer Gun (计算几何~暴力)

B. Han Solo and Lazer Gun time limit per test 1 second memory limit per test 256 megabyt...

Codeforces Round #388(Div. 2)B. Parallelogram is Back【计算几何】

B. Parallelogram is Back time limit per test 1 second memory limit per test 256 megabyte...

Codeforces Round #385 (Div. 2) B. Hongcow Solves A Puzzle 几何、思维题

题意:那个由x构成的图片可以平移但不能翻转,问2个一样的图片分别经过以后能否构成一个矩形。 几何、思维题 其实就是判断所给的X构成的图形是否本身是矩形,因为只有这样才能在不翻转的情况下拼出一个矩形。 ...

Codeforces Round #346 (Div. 2) (659A,659B,659C,659D(几何叉乘),659E(并查集))

Round House 题目链接: http://codeforces.com/problemset/problem/659/A 解题思路: The answer for the proble...

Codeforces Round #113 (Div. 2)E---Tetrahedron(矩阵,水题)

You are given a tetrahedron. Let’s mark its vertices with letters A, B, C and D correspondingly.An a...

【Codeforces Round 330 (Div 2)D】【计算几何 二分答案】Max and Bike 最小骑车距离使得圆上传感器很坐标位移为dis

D. Max and Bike time limit per test 2 seconds memory limit per test 256 megabytes i...

Codeforces Round #340 (Div. 2) C. Watering Flowers 计算几何、圆和点

O(n)的预处理出所有点到到那个圆心的距离,val[i].r1 val[i].r2; 然后 对于每个val[i]. r1 扫一遍 val[j], 当 val[j].r1 > r1 的时候 更新 r2 ...

【Codeforces Round 339 (Div 2)C】【计算几何 点到直线的距离模板】Peter and Snow Blower 多边形整体绕一圆心旋转的运行面积

C. Peter and Snow Blower time limit per test 2 seconds memory limit per test 256 megabyt...

Codeforces Round #409Div.2D. Volatile Kite(计算几何)

D. Volatile Kite time limit per test2 seconds memory limit per test256 megabytes inputstandard in...

Codeforces Round #409 (Div. 2) D. Volatile Kite 计算几何、凸多边形、线段类

题意:给出一个凸多边形,要求求出一个最大的dist,使得所有的点可以任意移动距离最大为第dist的路程,依然为凸多边形。 计算几何、凸多边形、线段类 对于凸多边形,每相邻的三个点可以构成一个三角形AB...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【计算几何】Codeforces Round #113 (Div. 2)-B. Polygons
举报原因:
原因补充:

(最多只允许输入30个字)