Heim > Datenbank > MySQL-Tutorial > Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

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

WBOY
Freigeben: 2016-06-07 15:49:52
Original
1015 Leute haben es durchsucht

题目点击打开链接 凸多边形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>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage