Home  >  Article  >  Database  >  Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

WBOY
WBOYOriginal
2016-06-07 15:49:521011browse

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严在A内。 注意AB有重点 。 将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候,

题目点击打开链接

凸多边形A, 多边形B, 判断B是否严格在A内。 

注意AB有重点 。 

将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。

或者说B上的某点在凸包的边上则也说明B不严格在A里面。

这个处理有个巧妙的方法,只需在求凸包的时候,

另外不能去重点。


int   cmp(double x){
      if(fabs(x)  0 ? 1 : -1 ;
}

struct  point{
        double x , y ;
        int k ;
        point(){}
        point(double _x , double _y):x(_x) , y(_y){}
        point operator - (const point &o){
              return  point(x - o.x , y - o.y) ;
        }
        friend double operator ^ (const point &a , const point &b){
              return a.x * b.y - a.y * b.x ;
        }
        friend bool operator   convex_hull(vector<point> a){
       vector<point>  s(a.size() * 2 + 5) ;
       sort(a.begin() , a.end()) ;
       int m = 0  ;
       for(int i = 0 ; i  1 && cmp((s[m-1] - s[m-2]) ^ (a[i] - s[m-2])) = 0 ; i--){
            while(m > k && cmp((s[m-1] - s[m-2]) ^ (a[i] - s[m-2]))  1) s.resize(m-1) ;
       return s ;
}

int   main(){
      int i , n ,  m  , ans = 0  ;
      vector<point> lis(200000) ;
      cin>>n;
      for(i = 0 ; i >m ;
      for(i = 0 ; i  hull = convex_hull(lis)  ;
      for(i = 0 ; i <br>
<br>


</point></point></point>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn