hdu2036改革春风吹满地

改革春风吹满地

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30566    Accepted Submission(s): 15736


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

虽然是个计算几何水题,但表示还是学到了不少= =  首先,想到了通过海伦公式,一遍O(n)求面积。。WA了无数发,看了discuss需要判断凹凸性(表示不会,计算几何基本为0= =)。。 然后学到了用叉积判断凹凸性(即叉积为平行四边形面积,但这个面积类似是矢量,有正负之分,好像这里也可以用点积判断角度吧我猜的) 最后搞搞就能A掉了。。。最坑的就是精度问题,卡了3发才过。。。太菜,还好通过水题学到了点。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define eps 1e-8
#define zero(x) (((x>0?(x):-(x))-eps)
#define mem(a,b) memset(a,b,sizeof(a))
#define memmax(a) memset(a,0x3f,sizeof(a))
#define pfn printf("\n")
#define ll __int64
#define ull unsigned long long
#define sf(a) scanf("%d",&a)
#define sf64(a) scanf("%I64d",&a)
#define sf264(a,b) scanf("%I64d%I64d",&a,&b)
#define sf364(a,b,c) scanf("%I64d%I64d%I64d",&a,&b,&c)
#define sf2(a,b) scanf("%d%d",&a,&b)
#define sf3(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define sf4(a,b,c,d) scanf("%d%d%d%d",&a,&b,&c,&d)
#define sff(a) scanf("%f",&a)
#define sfs(a) scanf("%s",a)
#define sfs2(a,b) scanf("%s%s",a,b)
#define sfs3(a,b,c) scanf("%s%s%s",a,b,c)
#define sfd(a) scanf("%lf",&a)
#define sfd2(a,b) scanf("%lf%lf",&a,&b)
#define sfd3(a,b,c) scanf("%lf%lf%lf",&a,&b,&c)
#define sfd4(a,b,c,d) scanf("%lf%lf%lf%lf",&a,&b,&c,&d)
#define sfc(a) scanf("%c",&a)
#define ull unsigned long long
#define debug printf("***\n")
const double PI = acos(-1.0);
const double e = exp(1.0);
const int INF = 0x7fffffff;;
template T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template T lcm(T a, T b) { return a / gcd(a, b) * b; }
template inline T Min(T a, T b) { return a < b ? a : b; }
template inline T Max(T a, T b) { return a > b ? a : b; }
bool cmpbig(int a, int b){ return a>b; }
bool cmpsmall(int a, int b){ return a0) return a-b;return b-a;
}
double triangle_area(double a,double b,double c,double d,double e,double f)//海伦公式
{double l1=sqrt(pow(solve(b,d),2)+pow(solve(a,c),2));double l2=sqrt(pow(solve(a,e),2)+pow(solve(b,f),2));double l3=sqrt(pow(solve(c,e),2)+pow(solve(d,f),2));// printf("%.2f %.2f %.2f\n",l1,l2,l3);double pos=0.5*(l1+l2+l3);double area=sqrt((double)(pos*(pos-l1)*(pos-l2)*(pos-l3)));return area;
}
int check(double a,double b,double c,double d,double e,double f)
{double x1=c-a;double y1=d-b;double x2=e-c;double y2=f-d;if(x1*y2-y1*x2>0) return 1;return -1;
}
int main()
{// freopen("data.in","r",stdin);int n;while(~sf(n)&&n){double a[110][2];for(int i=0;i


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部