(凸包判断)Codeforces166B Polygons

https://blog.csdn.net/xuh723/article/details/22451957
题意:给出两个图形,判断B是否在A中(不重)(保证AB不重点)
题解:因为时完全包含,所有只要对A,B一起求凸包,判断B中的点是否在凸包上出现即可。
若是没有完全包含这个条件,我们在算法中要将<=改为<(使得B中的点不会在凸包中两个A中点形成的线上),然后进行判断
在不完全包含条件下,若还不保证不重点,可以先将重点去除(无影响)


#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-8
 
struct point
{
       double x,y;
       point(){}
       point(double _x,double _y)
       {
                    x=_x;y=_y;
       }
       point operator - (const point &b) const
       {
             return point(x-b.x,y-b.y);
       }
       bool operator < (const point &b) const
       {
            return xeps)-(x<-eps);
}
 
double cross(point a,point b)
{
       return a.x*b.y-b.x*a.y;
}
 
int andrew()
{
    sort(p,p+n);
    int m=0;
    for (int i=0;i1&&cross(res[m-1]-res[m-2],p[i]-res[m-2])<0) --m;
        res[m++]=p[i];
    }
    int k=m;
    for (int i=n-2;i>=0;--i)
    {
        while (m>k&&cross(res[m-1]-res[m-2],p[i]-res[m-2])<0) --m;
        res[m++]=p[i];
    }
    if (m>1) --m;
    return m;
}
 
int main()
{
    while (scanf("%d",&na)!=EOF)
    {
          for (int i=0;i

你可能感兴趣的:((凸包判断)Codeforces166B Polygons)