HDOJ 2036 改革春风吹满地(叉乘定理)
2015-07-22 12:05
225 查看
改革春风吹满地
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22798 Accepted Submission(s): 11799
Problem Description
“ 改革春风吹满地,
不会AC没关系;
实在不行回老家,
还有一亩三分地。
谢谢!(乐队奏乐)”
话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然来这么几句打油诗。
好呀,老师的责任就是帮你解决问题,既然想种田,那就分你一块。
这块田位于浙江省温州市苍南县灵溪镇林家铺子村,多边形形状的一块地,原本是linle 的,现在就准备送给你了。不过,任何事情都没有那么简单,你必须首先告诉我这块地到底有多少面积,如果回答正确才能真正得到这块地。
发愁了吧?就是要让你知道,种地也是需要AC知识的!以后还是好好练吧...
Input
输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2... xn, yn),为了简化问题,这里的所有坐标都用整数表示。
输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。
Output
对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。
每个实例的输出占一行。
Sample Input
3 0 0 1 0 0 1 4 1 0 0 1 -1 0 0 -1 0
Sample Output
0.5 2.0
知道定理的人真是永远走在前面啊,看到题知道是分割成三角形求解,但求所有的三角形的面积也是很难的事。看了讨论区,知道有叉乘定理这东西,确实好用。
题解:求任意n边形面积, 只需要把它分割成以(0,0)为定点的n个三角形再求和。每个三角形的面积为Sn=abs((x1*y2-x2*y1))*0.5,得多边形的面积为:S=0.5 *abs ( (x0*y1-x1*y0) + (x1*y2-x2*y1) + ... +
(Xn-1*y0-x0*Yn-1) )最后一个要注意加上(注意:只有各点是逆时针排列才能这样做)
具体代码如下:
#include<cstdio> #include<cmath> int main() { int n,i,x[105],y[105]; double s; while(scanf("%d",&n)&&n) { s=0; scanf("%d%d",&x[0],&y[0]); for(i=1;i<n;i++) { scanf("%d%d",&x[i],&y[i]); s+=x[i-1]*y[i]-x[i]*y[i-1]; } s+=x[n-1]*y[0]-x[0]*y[n-1]; //第一个点与最后一个点围成的三角形,不能忘 printf("%.1lf\n",s/2.0); } return 0; }
相关文章推荐
- Mysql新增用户,权限管理
- HTML 网页截图
- python多态(摘录)
- referer详细解析
- ubuntu12.04 安装VLC,在root用户下不能使用的问题
- delegate、notification、KVO场景差别
- 进程快照
- [线段树]HDU 1754 I hate it
- mybatis 的SqlMapConfig.xml配置文件(精华) 小结
- GRE写作必备句型
- [tableView reloadData]方法添加动画的方法
- 微信带来的就业机会
- lambda表达式
- SSH使用RSA公钥配置免密码登录
- 过滤器使用实例
- zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
- C#使用队列(Queue)解决简单的并发问题
- AVA基础之反射(上)
- 【移动开发】布局优化利器<include/>和ViewStub
- 104 Maximum Depth of Binary Tree