/* poj 1654 Area 多边形面积 题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> #include<string.h> const int N=1000000+10; const double eps=1e-8; struct point { double x,y; point(){} point(double a,double b):x(a),y(b){} }; int len,index; char t_s[N]; //基础函数///////////////////////// double mo_distance(point p1,point p2) { return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); } double mo_xmult(point p2,point p0,point p1)//p1在p2左返回负,在右边返回正 { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } bool mo_ee(double x,double y) { double ret=x-y; if(ret<0) ret=-ret; if(ret<eps) return 1; return 0; } bool mo_gg(double x,double y) { return x > y + eps;} // x > y bool mo_ll(double x,double y) { return x < y - eps;} // x < y bool mo_ge(double x,double y) { return x > y - eps;} // x >= y bool mo_le(double x,double y) { return x < y + eps;} // x <= y //求多边形面积 double area_polygon(point shang,point zhe) { point yuan; yuan.x=yuan.y=0; return mo_xmult(zhe,yuan,shang)/2; } /////////////////// int getpoint(point shang,point &zhe) { if(t_s[index]=='5') return 0;; char doo=t_s[index]; int n=1; while(t_s[index+1]==t_s[index]) { ++n; ++index; } ++index; if(doo=='1') { zhe.x=shang.x-n; zhe.y=shang.y-n; }else if(doo=='2') { zhe.x=shang.x; zhe.y=shang.y-n; }else if(doo=='3') { zhe.x=shang.x+n; zhe.y=shang.y-n; }else if(doo=='4') { zhe.x=shang.x-n; zhe.y=shang.y; }else if(doo=='9') { zhe.x=shang.x+n; zhe.y=shang.y+n; }else if(doo=='6') { zhe.x=shang.x+n; zhe.y=shang.y; }else if(doo=='7') { zhe.x=shang.x-n; zhe.y=shang.y+n; }else if(doo=='8') { zhe.x=shang.x; zhe.y=shang.y+n; } return 1; } int main() { int t; scanf("%d",&t); getchar(); while(t--) { gets(t_s); len=strlen(t_s); index=0; point shang(0,0),zhe; double area=0; while(getpoint(shang,zhe)) { area+=area_polygon(shang,zhe); shang=zhe; } if(area<0) area=-area; __int64 ret=(__int64)area,i; for(i=ret;i<=ret+2;++i) { if(mo_ee((double)i,area)) { printf("%I64d ",i); break; }else if(mo_ee(0.5+i,area)) { printf("%I64d.5 ",i); } } } return 0; }