HDU 1115 Lifting the Stone
2016-07-09 23:37
316 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1115
题意:求凸多边形的重心
思路:明明是SB题,做法就是三角剖分每个三角形的重心乘上三角形面积的矢量和,最后除以总面积,我愣是WA了3天,最后才知道要把所有的除数放到最后除才不会有精度误差,舞草
题意:求凸多边形的重心
思路:明明是SB题,做法就是三角剖分每个三角形的重心乘上三角形面积的矢量和,最后除以总面积,我愣是WA了3天,最后才知道要把所有的除数放到最后除才不会有精度误差,舞草
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #define dou double struct Point{ dou x,y; Point(){} Point(dou x0,dou y0):x(x0),y(y0){} }p[5000005]; int n; int read(){ int t=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-')f=-1;ch=getchar();} while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();} return t*f; } Point operator +(Point p1,Point p2){ return Point(p1.x+p2.x,p1.y+p2.y); } dou operator *(Point p1,Point p2){ return p1.x*p2.y-p1.y*p2.x; } Point operator *(Point p1,dou x){ return Point(p1.x*x,p1.y*x); } Point operator /(Point p1,dou x){ return Point(p1.x/x,p1.y/x); } Point operator -(Point p1,Point p2){ return Point(p1.x-p2.x,p1.y-p2.y); } dou area(Point p1,Point p2,Point p3){ return (p2-p1)*(p3-p1); } int main(){ int T=read(); while (T--){ n=read(); dou S=0;Point ans(0,0); for (int i=1;i<=n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); p[n+1]=p[1]; for (int i=2;i<n;i++){ S+=((p[i]-p[1])*(p[i+1]-p[1])); ans=ans+((p[i]+p[i+1]+p[1]))*((p[i]-p[1])*(p[i+1]-p[1])); } ans=ans/(3.0*S); double Ansx,Ansy; Ansx=(double)(ans.x); Ansy=(double)(ans.y); printf("%.2f %.2f\n",Ansx,Ansy); } }
相关文章推荐
- JavaScript类数组对象
- [华为OJ] 字符串加密
- 数论相关公式
- XXTea算法Java版
- Android内核开发:图解Android系统的启动过程
- Github如何上传文件
- pch文件
- 用go和zk实现一个简单的分布式server
- [leetcode]345. Reverse Vowels of a String
- Java继承回顾(二)
- 利用Exception Breakpoint断点调试。
- 安装和使用Atom编辑器
- 服务器维护手册
- 苦逼程序员:半数加班(转)
- HTML与HTML5
- pygame实现简易音乐播放器
- xmlns:android="http://schemas.android.com/apk/res/android"的意思
- 欢迎使用CSDN-markdown编辑器
- Android开发之Html类详解
- Java基础---反射