您的位置:首页 > 其它

计算几何初步——面积公式(POJ 1654)

2012-01-17 14:57 483 查看
这题要注意一点就是数据类型的选择。。。

一定要选__int64或者long long,否则很容易出问题。

其余的就是直接用公式。。。。。

View Code

#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 1000004
#define END 5
using namespace std;
__int64 dir[10][2];
struct point {
__int64 x, y;
};

char data[MAXN];
void ini()
{
dir[7][0] = dir[4][0] = dir[1][0] = -1;
dir[9][0] = dir[6][0] = dir[3][0] = 1;
dir[2][0] = dir[8][0] = 0;
dir[9][1] = dir[8][1] = dir[7][1] = 1;
dir[3][1] = dir[2][1] = dir[1][1] = -1;
dir[6][1] = dir[4][1] = 0;
}

__int64 cross(point &p, point &q)
{
return q.y*p.x - p.y*q.x;
}

int main()
{
int T;
ini();
scanf("%d",&T);
getchar();
while (T--) {
cin>>data;
__int64 sx(0), sy(0);
point p1,p2;
p2.x = p1.x = sx;
p2.y = p1.y = sy;
__int64 nowx(0), nowy(0);
int len = strlen(data);
if (len == 1 || len == 3) {
cout<<0<<endl;
continue;
}
__int64 area(0);
for (int i(0),j(1); i<len-3; ++i) {
j = i + 1;
nowx += dir[data[i] - '0'][0];
nowy += dir[data[i] - '0'][1];
p1.x = nowx;
p1.y = nowy;
p2.x = nowx + dir[data[j] - '0'][0];
p2.y = nowy + dir[data[j] - '0'][1];
area += cross(p1,p2);
}
if (area < 0)area = -area;
if(area % 2)printf("%I64d.5\n", area/2);
else printf("%I64d\n", area/2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: