您的位置:首页 > 其它

POJ 1654 Area(计算几何)

2015-09-03 08:22 316 查看
Description

一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。给出一串包含1-9的字符串,问你这些点所围成的面积

Input

第一行为用例组数t,之后t行每行一个由1~9组成的字符串

Output

输出这些点所围成的面积

Sample Input

4

5

825

6725

6244865

Sample Output

0

0

0.5

2

Solution

向量叉乘求面积

Code

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
int dx[]={0,1,1,1,0,0,0,-1,-1,-1};
int dy[]={0,-1,0,1,-1,0,1,-1,0,1};
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
char s[1111111];
scanf("%s",s);
int len=strlen(s);
if(len<3)
{
printf("0\n");
continue;
}
ll area=0,x=0,y=0,px,py;
for(int i=0;i<len;i++)
{
px=x+dx[s[i]-'0'];
py=y+dy[s[i]-'0'];
area+=(px*y-py*x);
x=px;
y=py;
}
if(area<0)area=-area;
if(area%2==0)
printf("%lld\n",area/2);
else
printf("%lld.5\n",area/2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: