题目描述: 已经顺序给出多边形的各个顶点,求重心 #include <iostream> #include <algorithm> #include <cmath> using namespace std; struct point{ int x, y; }; point p[1000001]; double cal(int i, int j) { double res; res = p[i].x*p[j].y - p[j].x*p[i].y; return res; } int main() { int T, N; double cx, cy; scanf("%d", &T); for (int t = 0; t < T; t++) { scanf("%d", &N); for (int i = 0; i < N; i++) scanf("%d %d", &p[i].x, &p[i].y); p[N].x = p[0].x; p[N].y = p[0].y; double A = 0; for (i = 0; i < N; i++) { A += cal(i, i+1); } A /= 2; cx = cy = 0; for (i = 0; i < N; i++) { cx += (p[i].x + p[i+1].x)*cal(i, i+1); cy += (p[i].y + p[i+1].y)*cal(i, i+1); } cx /= 6*A; cy /= 6*A; printf("%.2lf %.2lf/n", cx, cy); } return 0; }