poj1654 Area
Posted liguanlin1124
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1654 Area相关的知识,希望对你有一定的参考价值。
题目描述:
题解:
本以为是水题结果是神题
计算几何求多边形面积。
考虑到结果一定是整数或者整数/2,我们应该用long long 来存……
用double会死……
还有日常只能用c++编译器,不能用g++。
还有用abs会莫名ce,要手写。
代码:
#include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; struct Point ll x,y; Point() Point(ll x,ll y):x(x),y(y) Point operator + (const Point&a)constreturn Point(x+a.x,y+a.y); Point operator - (const Point&a)constreturn Point(x-a.x,y-a.y); ll operator ^ (const Point&a)constreturn x*a.y-y*a.x; p[10]; typedef Point Vector; int T; char ch[1000050]; void init() p[1] = Point(-1,-1),p[2] = Point(0,-1),p[3] = Point(1,-1),p[4] = Point(-1,0); p[6] = Point(1,0),p[7] = Point(-1,1),p[8] = Point(0,1),p[9] = Point(1,1); void work() scanf("%s",ch+1); Point s0(0,0),s1(0,0),s2(0,0); int len = strlen(ch+1); long long ans = 0; for(int i=1;i<len;i++) s1 = s2,s2 = s2+p[ch[i]-‘0‘]; ans+=((s1-s0)^(s2-s0)); if(ans<0)ans=-ans; if(ans&1) printf("%lld.5\n",ans/2); else printf("%lld\n",ans/2); int main() scanf("%d",&T);init(); while(T--)work(); return 0;
以上是关于poj1654 Area的主要内容,如果未能解决你的问题,请参考以下文章