Lifting the Stone HDU - 1115 

https://vjudge.net/problem/HDU-1115

参考博客https://www.cnblogs.com/jbelial/archive/2011/08/08/2131165.html

可作为计算多边形重心模板

复杂度 o(n)

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
struct centre
{
       double x , y ;
};
int cas , n ;
double Area( centre p0 , centre p1 , centre p2 )
{
       double area = 0 ;
       area =  p0.x * p1.y + p1.x * p2.y + p2.x * p0.y - p1.x * p0.y - p2.x * p1.y - p0.x * p2.y;
       return area / 2 ;  // 另外在求解的过程中,不需要考虑点的输入顺序是顺时针还是逆时针,相除后就抵消了。
}
int main ()
{
    centre p0 , p1 , p2 ;
    double sum_x , sum_y , sum_area , area;
    scanf ( "%d" , &cas ) ;
    while ( cas -- )
    {
          sum_x = sum_y = sum_area = 0 ;
          scanf ( "%d" , &n ) ;
          scanf ( "%lf%lf" , &p0.x , &p0.y ) ;
          scanf ( "%lf%lf" , &p1.x , &p1.y ) ;
          for ( int i = 2 ; i < n ; ++ i )
          {
              scanf ( "%lf%lf" , &p2.x , &p2.y ) ;
              area = Area(p0,p1,p2) ;
              sum_area += area ;
              sum_x += (p0.x + p1.x + p2.x) * area ;
              sum_y += (p0.y + p1.y + p2.y) * area ;
              p1 = p2 ;
          }
          printf ( "%.2lf %.2lf\n" , sum_x / sum_area / 3 , sum_y / sum_area / 3 ) ;
    }
    return 0 ;
}

猜你喜欢

转载自blog.csdn.net/qq_41776911/article/details/82345208
今日推荐