题解:多边形n个定点,分割成n-2个三角形,给每个三角形求出重心,因为每个三角形的面积不相同,所以重心的质量不一样,问题转换为求n-2个质量不均匀的点的重心。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
const int maxn = 1e6+5;
struct Node{
double x,y;
}arr[maxn];
double AREA(const Node &p0,const Node &p1,const Node &p2){
return p0.x*p1.y+p1.x*p2.y+p2.x*p0.y-p0.x*p2.y-p1.x*p0.y-p2.x*p1.y;
}
int main(){
int T;
scanf("%d",&T);
int n;
Node p0,p1,p2;
double areasum;
double x,y;
while(T--){
scanf("%d",&n);
scanf("%lf%lf",&p0.x,&p0.y);
scanf("%lf%lf",&p1.x,&p1.y);
areasum = 0,x=0,y=0;
for(int i = 2; i < n; i++){
scanf("%lf%lf",&p2.x,&p2.y);
double area = AREA(p0,p1,p2);
areasum += area;
x += ((p0.x+p1.x+p2.x)*area);
y += ((p0.y+p1.y+p2.y)*area);
p1=p2;
}
printf("%.2lf %.2lf\n",x/3/areasum,y/3/areasum);
}
return 0;
}