首页 > 代码库 > HDU 1115 Lifting the Stone
HDU 1115 Lifting the Stone
PS: 几何基础,求解多边形重心问题。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <cmath> using namespace std; struct point{ double x, y; point(double x=0, double y=0):x(x), y(y) {} }; point operator - (point A, point B) { return point(A.x-B.x, A.y-B.y); } double Cross(point A, point B) { return A.x*B.y - A.y*B.x; } vector<point> v; int n; int main() { int T; point tmp; scanf("%d", &T); while(T--) { scanf("%d", &n); v.clear(); for(int i = 0; i < n; i++) { scanf("%lf%lf", &tmp.x, &tmp.y); v.push_back(tmp); } point res; res.x = 0, res.y = 0; double sum = 0, det; for(int i = 1; i < n-1; i++) { det = Cross(v[i]-v[0], v[i+1]-v[0]); res.x += det*(v[0].x+v[i].x+v[i+1].x); res.y += det*(v[0].y+v[i].y+v[i+1].y); sum += det; } res.x = res.x/(sum*3); res.y = res.y/(sum*3); printf("%.2f %.2f\n", res.x, res.y); // G++, C++ } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。