hdu 1115:Lifting the Stone(计算几何,求多边形重心。 过年好!)
Lifting the Stone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4819 Accepted Submission(s): 2006
#include <iostream>
#include <iomanip>
using namespace std;
struct point { double x, y; };
point bcenter(point pnt[], int n){
point p, s;
double tp, area = , tpx = , tpy = ;
p.x = pnt[].x; p.y = pnt[].y;
for (int i = ; i <= n; ++i) { // point: 0 ~ n-1
s.x = pnt[(i == n) ? : i].x;
s.y = pnt[(i == n) ? : i].y;
tp = (p.x * s.y - s.x * p.y); area += tp / ;
tpx += (p.x + s.x) * tp; tpy += (p.y + s.y) * tp;
p.x = s.x; p.y = s.y;
}
s.x = tpx / ( * area); s.y = tpy / ( * area);
return s;
}
point P[];
int main()
{
int T,N;
cin>>T;
cout<<setiosflags(ios::fixed)<<setprecision();
while(T--){
cin>>N;
for(int i=;i<N;i++) //从0开始输入多边形的n个点
cin>>P[i].x>>P[i].y;
point t = bcenter(P,N); //返回重心坐标
cout<<t.x<<' '<<t.y<<endl;
}
return ;
}
重新做了一遍这个题,现在理解了求多边形重心的算法,在poj上找到了一样的题,在两个OJ上同时提交。一开始总是WA,后来看了很多题解和讨论发现是精度问题,由于除法会产生很大的误差,再小的浮点误差,累积到10w后都是很大的误差,所以应该尽量减少除法。我改进之后,算法只有加法和乘法,只有最后再/3。最后在hdu上AC,但是poj上死活AC不了,而且上面使用模板的代码放到poj上竟然超时,百思不得其解。郁闷……
hdu上AC的代码:
#include <stdio.h>
typedef struct {
double x,y;
}Point;
double getS(Point a,Point b,Point c) //返回三角形面积
{
return ((b.x - a.x) * (c.y - a.y) - (b.y - a.y)*(c.x - a.x))/;
}
Point getPZ(Point p[],int n) //返回多边形重心
{
Point z;
double sumx = ,sumy = ;
double sumS = ;
for(int i=;i<=n-;i++){
double S = getS(p[],p[i+],p[i]);
sumS += S;
sumx += (p[].x+p[i].x+p[i+].x)*S;
sumy += (p[].y+p[i].y+p[i+].y)*S;
}
z.x = sumx / (sumS* );
z.y = sumy / (sumS* );
return z;
}
Point p[];
int main()
{
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
Point z = getPZ(p,n);
printf("%.2lf %.2lf\n",z.x,z.y);
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hdu 1115:Lifting the Stone(计算几何,求多边形重心。 过年好!)的更多相关文章
- hdu 1115 Lifting the Stone
题目链接:hdu 1115 计算几何求多边形的重心,弄清算法后就是裸题了,这儿有篇博客写得很不错的: 计算几何-多边形的重心 代码如下: #include<cstdio> #include ...
- hdu 1115 Lifting the Stone (数学几何)
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 1115 Lifting the Stone 多边形的重心
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Lifting the Stone(求多边形的重心—)
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- poj 1115 Lifting the Stone 计算多边形的中心
Lifting the Stone Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- hdu1115 Lifting the Stone(几何,求多边形重心模板题)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=1115">http://acm.hdu.edu.cn/showproblem.php ...
- Hdoj 1115.Lifting the Stone 题解
Problem Description There are many secret openings in the floor which are covered by a big heavy sto ...
- UVALive 4426 Blast the Enemy! --求多边形重心
题意:求一个不规则简单多边形的重心. 解法:多边形的重心就是所有三角形的重心对面积的加权平均数. 关于求多边形重心的文章: 求多边形重心 用叉积搞一搞就行了. 代码: #include <ios ...
- Lifting the Stone 计算几何 多边形求重心
Problem Description There are many secret openings in the floor which are covered by a big heavy sto ...
随机推荐
- Nutch相关框架安装使用最佳指南(转帖)
Nutch相关框架安装使用最佳指南 Chinese installing and using instruction - The best guidance in installing and u ...
- LDAP 中 CN,OU,DC 的含意
CN, OU, DC 都是 LDAP 连接服务器的端字符串中的区别名称(DN, Distinguished Name) LDAP连接服务器的连接字串格式为:ldap://servername/DN ...
- javascript获取地址栏参数
http://gzycm520.blog.51cto.com/175220/71030方法一: <script type="text/javascript"> < ...
- python笔记-字符串
>>> myString = 'hello world !' >>> print myString # print语句会调用str()函数 hello world ...
- php扩展swoole的安装
这个明星php安装是要装php-pear yum install php-pear 然后通过pear命名安装swoole pecl install swoole 配置php.ini 添加 extens ...
- HDU 1016:Prime Ring Problem
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 单页应用SPA做SEO的一种清奇的方案
单页应用SPA做SEO的一种清奇的方案 网上有好几种单页应用转seo的方案,有服务端渲染ssr.有预渲染prerender.google抓AJAX.静态化...这些方案都各有优劣,开发者可以根据不同的 ...
- JavaScript判断浏览器类型及版本(新增IE11)
$(function () { var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/rv:( ...
- 每日英语:Stalled Project Shows Why China's Economy Is Wobbling
CAOFEIDIAN, China $91 billion industrial project here, mired in debt and unfulfilled promise, sugge ...
- 执行git命令出现 xcrun: error:
xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does no ...