poj1654 Area

Posted liguanlin1124

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1654 Area相关的知识,希望对你有一定的参考价值。

题目描述:

vjudge

POJ

题解:

本以为是水题结果是神题

计算几何求多边形面积。

考虑到结果一定是整数或者整数/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;
View Code

 

以上是关于poj1654 Area的主要内容,如果未能解决你的问题,请参考以下文章

poj.1654Area(计算几何)

poj.1654Area(计算几何)

poj.1654Area(计算几何)

poj 1654 Area(多边形面积)

POJ 1654 Area [多边形面积]

POJ 1654 Area