算法解析:这道题其实就是计算几何中的求取多边形面积,具体原理参考文章计算几何--求多边形的面积
算法实现:需要注意这道题的实现中不能使用double而必须使用long long,在最后输出的时候除以2后需要注意整数和0.5的输出。
代码实现
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
long long dot[10][2]={{0,0},{1,-1},{1,0},{1,1},{0,-1},{0,0},{0,1},{-1,-1},{-1,0},{-1,1}};
string step;
long long Area(long long x1, long long y1, long long x2, long long y2){
return x1*y2-x2*y1;
}
int main()
{
int t;
cin>>t;
for (int i=0; i!=t; i++)
{
long long x1,x2,y1,y2;
long long area=0;
cin>>step;
x1=dot[(int)step[0]-48][0];
y1=dot[(int)step[0]-48][1];
if (step.length()!=1)
{
for (int j=1; j!=step.length()-1; j++)
{
x2=x1;
y2=y1;
x1+=dot[(int)step[j]-48][0];
y1+=dot[(int)step[j]-48][1];
area+=Area(x1,y1,x2,y2);
}
}
area=(area>0 ? area:(-area));
if (area/2*2!=area)
cout<<area/2<<".5"<<endl;
else
cout<<area/2<<endl;
}
return 0;
}

本文介绍了解决POJ1654问题的一种计算几何方法——求多边形面积。通过特定的坐标变换及面积计算公式,避免了浮点数运算带来的精度问题,并实现了准确的面积输出。

731

被折叠的 条评论
为什么被折叠?



