您的位置:首页 > 其它

【计算几何】poj 1654 Area

2012-08-16 20:59 330 查看
计算凸包面积,非常基础的一道计算几何题目,精度问题上比较烦人,需要转换成long long来输出最终结果。

#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;

const int dir_x[]={0,-1,0,1,-1,0,1,-1,0,1};
const int dir_y[]={0,-1,-1,-1,0,0,0,1,1,1};
struct Point{
double x,y;
};
Point p1,p2,current;
double dbl(Point a,Point b);

int main(){
int t,len;
double area;
char str[1000005];
scanf("%d",&t);
while(t--){
scanf("%s",str);
len=strlen(str);
//first=false;
area=0;
current.x=0; current.y=0;
p1=current;
int last=-1;
for(int i=0;i<len-1;i++){
int direction=str[i]-'0';
if(last!=direction){
p2=current;
area+=dbl(p1,p2);
p1=p2;
}
current.x+=dir_x[direction];
current.y+=dir_y[direction];
last=direction;
}
if(area<0)
area=-area;
long long goal=(long long)area;
if(goal%2==0)
cout<<goal/2<<endl;
else
cout<<goal/2<<".5"<<endl;
//cout<<area/2<<endl;
}
//system("pause");
return 0;
}

double dbl(Point a,Point b){
return (a.x)*(b.y)-(b.x)*(a.y);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: