注意点:用double会出错,精度问题。
因为只会出现正数或者n.5,所以,用__int64处理。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double dir[][2]={{0,0},{-1,1},{0,1},{1,1},{-1,0},{0,0},{1,0},{-1,-1},{0,-1},{1,-1}};
class point
{
public:
double x,y;
};
point s,next,last;
int cnt;
char ch;
int main()
{
int t,i;
cin>>t;
while(t--)
{
s.x =0;s.y=0;
last=s;
double ans=0;
cin>>ch;
while(ch!='5')
{
int k=ch-'0';
next.x =last.x +dir[k][0];
next.y =last.y +dir[k][1];
ans+=last.x *next.y -last.y*next.x ;
last=next;
cin>>ch;
}
ans+=s.x *last.y-s.y*last.x ;
if(ans<0) ans*=-1;
printf("%lf/n",ans/2);
}
return 0;
}